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?
Author: msouth, 2010-10-28

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.

Teraz prawdziwy przykład lepszego zrozumienia:]}

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ócona master)
  • refs/heads/feature (nazwa skrócona feature)
  • refs/remotes/origin/master (Nazwa skrócona origin/master)
  • refs/remotes/origin/feature (nazwa skrócona origin/feature)

Typowy scenariusz:

  1. jakiś inny programista kończy wszystkie prace nad feature, łączy ją z master i usuwa feature gałąź ze zdalnego repozytorium.
  2. domyślnie, gdy robisz git fetch (lub git pull), żadne odniesienia nie są usuwane z lokalnego repozytorium, więc nadal masz wszystkie te 4 odniesienia.
  3. Postanawiasz je wyczyścić i uciekać.
  4. git wykrywa, że feature branch już nie istnieje, więc refs/remotes/origin/feature jest przestarzałą gałęzią, którą należy usunąć.
  5. teraz masz 3 referencje, w tym refs/heads/feature, ponieważ git remote prune nie usuń wszelkie odniesienia refs/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)

 190
Author: max,
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