Praca z Git jest bardzo wygodnia – o czym wspominałem niejednokrotnie.
Całe repozytorium mamy na lokalnym komputerze więc możemy bez dostępu do sieci tworzyć własne branche i na nich pracować.
Model pracy grupowej jednak poleca używanie jednego centralnego repozytorium, które jest miejscem zbiorczym na wspólny kod
wszystkich programistów.
W mojej obecnej pracy używam dwóch komputerów. Jednego w domu i drugiego w pracy. Z tego też powodu chciałbym mieć możliwość
aby mój prywatny branch był w centralnym repozytorium jednak aby nie bałaganił kodu głównego.
Za pomocą Git jest to możliwe i łatwe do wykonania.
Jest nawet kilka sposobów na wykonanie tej operacji,
Opiszę ten z nich, który używam i działa dla mnie wyśmienicie.
Przyjmijmy, że pracujemy już z kodem, lokalne i zdalne repozytoria są ustawione.
W pierwszej kolejności tworzymy gałąź w zdalnym repozytorium, nazwijmy ją new_feature
1 2 |
git push origin origin:refs/heads/new_feature |
To spowoduje skopiowanie zdalnej gałęzi master
do nowoutworzonej new_feature
Sprawdzamy czy kod jest aktualny
1 2 |
git fetch origin |
teraz na liście branch’y możemy znaleźć tą zdalną
1 2 |
git branch -r |
na liście powinniśmy zobaczyć: origin/new_feature
Kopiowanie zdalnego branch’a do lokalnego repozytorium
1 2 |
git checkout --track -b new_feature origin/new_feature |
Powyższa komenda utworzy nową gałąź new_feature
która opiera się na zdalnej o tej samej nazwie.
Dodatkowo lokalny branch będzie śledził ten zdalny.
Co to znaczy śledził?
To oznacza, że przy wykonywaniu komend bez argumentów push czy pull gałęzie te będą automatycznie się synchronizowały
Git wie, że lokalny branch jest połączony ze zdalnym.
Ponownie sprawdzamy czy wszystko jest aktualne
1 2 |
git pull |
I to wszystko
Kasowanie zdalnego branch’a
Gdy branch, którego wykorzystywaliśmy przestanie nam być potrzebny, możemy go usunąć:
1 2 |
git push origin :heads/new_feature |
A co w przypadku gdy mamy skonfigurowany zdalny branch, ale ten lokalny go nie śledzi?
Możemy to zrobić ręcznie
1 2 3 4 5 |
git config branch.new_feature.remote new_feature git config branch.new_feature.merge refs/heads/new_feature git push |
Może komuś się przyda
.