git remote prune – nie pokazałem tyle przycinanych gałęzi, ile się spodziewałem
Ze strony man:
Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".
Więc usunąłem kilka gałęzi za pomocą
git push origin :staleStuff
And then ran
git remote prune origin
Jednak tylko jedna lokalna gałąź została przycinana. Niektóre z tych oddziałów zostały stworzone przeze mnie, niektóre przez współpracowników. Czy to oznacza, że nie śledziłem tych gałęzi prawidłowo w pierwszej kolejności? 1 answers
Kiedy używasz git push origin :staleStuff
, automatycznie usuwa origin/staleStuff
, więc kiedy uruchomiłeś git remote prune origin
, przyciąłeś jakąś gałąź, która została usunięta przez kogoś innego. Bardziej prawdopodobne jest, że Twoi współpracownicy muszą teraz uruchomić git prune
, aby pozbyć się usuniętych gałęzi.
Więc co dokładnie git remote prune
robi? Główna idea: lokalne gałęzie (nie śledzące gałęzi) nie są dotykane przez polecenie git remote prune
i powinny być usuwane ręcznie.
Masz zdalne repozytorium z 2 gałęziami: master
i feature
. Załóżmy, że pracujesz na obu gałęziach, więc w rezultacie masz te odniesienia w lokalnym repozytorium (pełne nazwy referencyjne są podane, aby uniknąć nieporozumień): {]}
-
refs/heads/master
(Nazwa skróconamaster
) -
refs/heads/feature
(nazwa skróconafeature
) -
refs/remotes/origin/master
(Nazwa skróconaorigin/master
) -
refs/remotes/origin/feature
(nazwa skróconaorigin/feature
)
Typowy scenariusz:
- jakiś inny programista kończy wszystkie prace nad
feature
, łączy ją zmaster
i usuwafeature
gałąź ze zdalnego repozytorium. - domyślnie, gdy robisz
git fetch
(lubgit pull
), żadne odniesienia nie są usuwane z lokalnego repozytorium, więc nadal masz wszystkie te 4 odniesienia.
Postanawiasz je wyczyścić i uciekać.
- git wykrywa, że
feature
branch już nie istnieje, więcrefs/remotes/origin/feature
jest przestarzałą gałęzią, którą należy usunąć. - teraz masz 3 referencje, w tym
refs/heads/feature
, ponieważgit remote prune
nie usuń wszelkie odniesieniarefs/heads/*
.
Możliwe jest zidentyfikowanie lokalnych gałęzi, powiązanych ze zdalnymi gałęziami śledzącymi, za pomocą parametru konfiguracyjnego branch.<branch_name>.merge
. Parametr ten nie jest tak naprawdę wymagany, aby cokolwiek działało (prawdopodobnie z wyjątkiem git pull
), więc może go zabraknąć.
(zaktualizowano przykład i przydatne informacje z komentarzy)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-30 01:18:31