wake-up-neo.net

Git Remote Prune - zeigte nicht so viele beschnittene Zweige, wie ich erwartet hatte

Von der Manpage:

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>".

Also habe ich ein paar Äste mit entfernt

git Push Origin :staleStuff

und rannte dann

git remote Prune Origin

Es wurde jedoch nur eine einzige lokale Niederlassung beschnitten. Einige dieser Zweige wurden von mir erstellt, andere von Mitarbeitern. Bedeutet dies, dass ich diese Zweige überhaupt nicht richtig verfolgt habe?

112
Felixyz

Wenn Sie git Push Origin :staleStuff Verwenden, wird Origin/staleStuff Automatisch entfernt. Wenn Sie also git remote Prune Origin Ausführen, haben Sie einen Zweig beschnitten, der von einer anderen Person entfernt wurde. Es ist wahrscheinlicher, dass Ihre Mitarbeiter jetzt git Prune Ausführen müssen, um die von Ihnen entfernten Zweige zu entfernen.


Was genau macht git remote Prune? Hauptidee: Lokale Zweige (keine Verfolgungszweige) werden vom Befehl git remote Prune Nicht berührt und sollten manuell entfernt werden.

Nun ein reales Beispiel zum besseren Verständnis:

Sie haben ein Remote-Repository mit 2 Verzweigungen: master und feature. Nehmen wir an, Sie arbeiten an beiden Zweigen, sodass Sie diese Referenzen in Ihrem lokalen Repository haben (vollständige Referenznamen werden angegeben, um Verwechslungen zu vermeiden):

  • refs/heads/master (Kurzname master)
  • refs/heads/feature (Kurzname feature)
  • refs/remotes/Origin/master (Kurzname Origin/master)
  • refs/remotes/Origin/feature (Kurzname Origin/feature)

Nun ein typisches Szenario:

  1. Einige andere Entwickler beenden alle Arbeiten an feature, führen sie in master zusammen und entfernen den Zweig feature aus dem Remote-Repository.
  2. Wenn Sie git fetch (Oder git pull) Ausführen, werden standardmäßig keine Referenzen aus Ihrem lokalen Repository entfernt, sodass Sie immer noch über all diese 4 Referenzen verfügen.
  3. Sie beschließen, sie zu bereinigen und git remote Prune Origin Auszuführen.
  4. git erkennen, dass der Zweig feature nicht mehr existiert, also ist refs/remotes/Origin/feature ein veralteter Zweig, der entfernt werden sollte.
  5. Jetzt haben Sie 3 Referenzen, einschließlich refs/heads/feature, Da git remote Prune Keine refs/heads/* - Referenzen entfernt.

Über den Konfigurationsparameter branch.<branch_name>.merge Können lokale Zweige identifiziert werden, die mit Remote-Tracking-Zweigen verknüpft sind. Dieser Parameter ist nicht wirklich erforderlich, damit etwas funktioniert (wahrscheinlich mit Ausnahme von git pull), Sodass er möglicherweise fehlt.

(aktualisiert mit Beispiel & nützlichen Informationen aus Kommentaren)

187
max