Frage Wie hole ich alle Gitäste ab?


Ich habe ein Git-Repository geklont, das ungefähr 5 Zweige enthält. Wie auch immer, wenn ich es tue git branch Ich sehe nur einen von ihnen:

$ git branch
* master

Ich weiß, dass ich es kann git branch -a sehen alle die Zweige, aber wie würde ich alle Zweige lokal ziehen, wenn ich es tue git branch, es zeigt:

$ git branch
* master
* staging
* etc...

940
2018-04-25 09:05


Ursprung


Antworten:


Ich habe meine Antwort vor einiger Zeit geschrieben und der letzte Downvote hat mich motiviert, es mit meiner späteren Erfahrung zu aktualisieren :-)

Edit: vorherige Version dieser Antwort erstellt Zweige mit 'Herkunft' Präfix, alle zeigen auf Master-Zweig, anstelle von tatsächlichen Zweigen und Probleme mit Variablenerweiterungen. Dies wurde gemäß den Kommentaren behoben.

Sie können einen Zweig von allen Fernbedienungen wie folgt abrufen:

git fetch --all

fetch Aktualisiert lokale Kopien von Remote-Zweigstellen, sodass dies für Ihre lokalen Zweigstellen immer sicher ist ABER:

  1. fetch wird nicht aktualisieren lokale Niederlassungen (die Spur entfernte Zweige); Wenn Sie Ihre lokalen Zweigstellen aktualisieren möchten, müssen Sie noch jede Verzweigung ziehen.

  2. fetch wird nicht erstellen lokale Niederlassungen (die Spur Remote Branches), müssen Sie dies manuell tun. Wenn Sie alle Remote-Zweige auflisten möchten: git branch -a

Zu aktualisieren lokale Niederlassungen, die entfernte Niederlassungen verfolgen:

git pull --all

Dies kann jedoch immer noch unzureichend sein. Es funktioniert nur für Ihre lokalen Niederlassungen, die entfernte Niederlassungen verfolgen. Um alle entfernten Zweige zu verfolgen, führen Sie diesen oneliner aus VOR  git pull --all:

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

TL, DR-Version

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

(Es scheint, dass Pull alle Zweige von allen Fernbedienungen holt, aber ich hole immer zuerst, um sicher zu gehen)

Führen Sie den ersten Befehl nur aus, wenn sich auf dem Server Remoteverzweigungen befinden, die nicht von Ihren lokalen Zweigstellen überwacht werden.

P.S. so viel ich weiss git fetch --all und git remote update sind gleichwertig.



Kamil Szot Kommentar, die 74 (mindestens) Menschen als nützlich empfunden haben.

Ich musste verwenden:

for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done

weil Ihr Code lokale Zweige mit dem Namen erstellt hat origin/branchname und   Ich bekam "Refname 'Herkunft / Branchname' ist mehrdeutig, wenn ich   darauf Bezug genommen.


1261
2018-04-25 09:10



So listen Sie entfernte Niederlassungen auf:
git branch -r 

Sie können sie als lokale Zweige mit folgenden Informationen abrufen:
git checkout -b LocalName origin/remotebranchname


419
2018-04-25 10:00



Sie müssen lokale Niederlassungen erstellen, die entfernte Niederlassungen verfolgen.

Angenommen, Sie haben nur eine Fernbedienung angerufen originDieses Snippet erstellt lokale Zweige für alle Remote-Tracking-Objekte:

for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

Danach, git fetch --all aktualisiert alle lokalen Kopien von Remote-Zweigstellen.

Ebenfalls, git pull --all aktualisiert Ihre lokalen Überwachungszweige, aber abhängig von Ihren lokalen Commits und wie die Konfigurationsoption "Zusammenführen" gesetzt wird, kann es einen Zusammenführungs-Commit, einen schnellen Vorlauf oder einen Fehler erzeugen.


159
2018-01-17 15:33



Wenn Sie tun:

git fetch origin

dann werden sie alle vor Ort sein. Wenn Sie dann Folgendes ausführen:

git branch -a

Sie sehen sie als Fernbedienungen / Herkunft / Zweigname aufgelistet. Da sie vor Ort sind, kannst du mit ihnen machen, was immer du willst. Beispielsweise:

git diff origin/branch-name 

oder

git merge origin/branch-name

oder

git checkout -b some-branch origin/branch-name

96
2018-04-25 13:52



$ git remote update  
$ git pull --all

Dies setzt voraus, dass alle Zweige verfolgt werden

Wenn sie nicht sind, können Sie das in bash abfeuern

for remote in `git branch -r `; do git branch --track $remote; done

Führen Sie dann den Befehl aus.


42
2018-04-25 09:07



wie wäre es mit git fetch && git checkout RemoteBranchName ? funktioniert sehr gut für mich ...


34
2018-05-08 16:14



Die Bash for Loop funktionierte nicht für mich, aber das tat genau das, was ich wollte. Alle Zweige meiner Herkunft spiegelten sich lokal als gleicher Name wieder.

git fetch origin '+refs/heads/*:refs/heads/*'

27
2017-10-28 20:02