Założenia:

  • korzystam z Git w linii poleceń
  • pomiędzy dotychczas używanym serwerem a zdalną maszyną organizacja (pozdrawiam serdecznie CI PW) bez ostrzeżenia zmieniła ustawienia firewalla blokując wszystko
  • z sieci lokalnej organizacji da się zcommitować więc wystarczy zabrać repo fizycznie
  • komputer stacjonarny, nie da się go zawieźć
  • laptop do przeniesienia danych i commitu
  • z laptopa na stacjonarny można ssh

Synchronizacja stacjonarny -> laptop

Na laptopie ustawiam nowego remote

cd projekt
git remote add stacjonarny ssh://l@192.168.666.666/home/user/projekt
git pull stacjonarny main*

* “main” albo “master” jeśli nie zmieniono

Synchronizacja laptop -> stacjonarny

Na laptopie też były zmiany a bez dostępnego centralnego serwera nie znajdą się one na stacjonarnym.

To nie zadziała:

git push stacjonarny main*

Domyślnie jest ostrzeżenie ponieważ repo na zdalnym-stacjonarnym nie będzie “wiedziało” o nowych zmianach.

Na stacjonarnym trzeba pozwolić na takie pushe ale warning lepiej zostawić:

git config --local receive.denyCurrentBranch warn

Teraz na laptopie da się zrobić push. Jednak na stacjonarnym (teraz to remote) trzeba zresetować HEAD.

git reset --hard

Trzeba przy tym pamiętać, że niescommitowane zmiany można przy tym stracić. Trzeba zwrócić uwagę, czy czegoś nie należy “restore”.

Weryfikacja

Teraz na obu maszynach powinno być to samo. Sprawdzamy logi.

git log --color --decorate=full --pretty=fuller  --stat --graph

Można jeszcze obejrzeć reflog:

git reflog

Transport za firewalla

Fizyczny transport pendrive/dysku/laptopa do wnętrza organizacji, za firewalla i push.

git push

Podziękowania za możliwość przećwiczenia tego scenariusza w praktyce