it-swarm.com.de

git ciągnie wszystkie gałęzie ze zdalnego repozytorium

Jak wyciągnąć wszystkie zdalne oddziały do ​​mojego repozytorium?

jeśli napiszę:

git branch -a

Dostaję długą listę oddziałów, ale jeśli wpiszesz:

git branch 

Widzę tylko 2 z nich.

Jak wyciągnąć gałęzie ALL na moją lokalną listę?

Wiem, że mogę to zrobić:

git checkout --track Origin/branch-name

ale to ciągnie i sprawdza tylko jedną gałąź na raz. Jakikolwiek sposób, aby zrobić to wszystko od razu, bez tej całej żmudnej pracy bieganiagit checkout --track Origin/branch-namew kółko?


ps. Próbowałem podążać za poleceniami, żaden z nich nie pojawiał się w moim oddzialegit branchlista:

git fetch --all
git remote update
git pull --all
24
MarcinWolny

Der Befehl, den ich normalerweise verwende, um alle sichtbaren Upstream - Zweige zu machen und sie zu verfolgen ist detailliert in " Alle entfernten Git-Zweige als lokale Zweige verfolgt ":

remote=Origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/[^\/]+\//,"",$1); print $1}'`; do git branch --set-upstream-to $remote/$brname $brname ; done

Oder:

remote=Origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/[^\/]+\//,"",$1); print $1}'`; do git branch --track $brname $remote/$brname  ; done

Für mehr Lesbarkeit:

remote=Origin ; // put here the name of the remote you want
for brname in `
  git branch -r | grep $remote | grep -v master | grep -v HEAD 
  | awk '{gsub(/[^\/]+\//,"",$1); print $1}'
`; do 
  git branch --set-upstream-to $remote/$brname $brname; 
  # or
  git branch --track $brname  $remote/$brname ; 
done

Die zweite ist für die Erstellung neuer lokaler Niederlassungen, die entfernte Niederlassungen verfolgen.

15
VonC

Lesen Sie z. diese Erklärung http://git-scm.com/book/de/Git-Branching-Remote-Branches

Lassen Sie uns zunächst einige git-Begriffe erklären:

  • abrufen: Abrufen von Inhalten (oder Aktualisierungen) von einem Remote-Repo
  • pull: Abrufen (wie oben) und Zusammenführen in einem Schritt

Das ursprüngliche Poster erwähnte das Verschmelzen nicht, daher könnte ich in der richtigen git-Terminologie erraten, dass er vielleicht sogar gefragt haben wollte: "git hol alle Äste aus dem entfernten Repository".

Wenn Sie die Zweige in git branch -a sehen, haben Sie sie bereits abgerufen . Sie können dies überprüfen, indem Sie den Befehl git show remotes/Origin/some-branch:some-file eingeben.

Oder kann z. git diff remotes/Origin/some-branch master

Sie können sie sogar auschecken git checkout remotes/Origin/some-branch

(Um sicherzugehen, dass Sie das Netzwerkkabel entfernen können, werden Sie feststellen, dass die Befehle funktionieren, ohne sich mit dem Remote-Repo in Verbindung zu setzen.)

Die Zweige Remotes/... werden entfernte Zweige genannt, die jedoch bereits in Ihrem Repo abgerufen werden. Sie sind schreibgeschützt, Sie können sie nicht ändern (deshalb erscheint beim Auschecken eine Meldung). Obwohl sie den Status eines Remote-Repos zum Zeitpunkt des letzten Abruf- oder Pull-Vorgangs widerspiegeln, werden sie tatsächlich lokal gespeichert.

Wenn Sie git checkout some-branch bereits vorhanden sind und einige Verzweigungen noch nicht vorhanden sind, die Fernbedienungen/Origin/einige Verzweigungen jedoch vorhanden sind, erstellt git einen Tracking-Zweig, der als Verzweigung bezeichnet wird. Dies ist wieder eine lokale Operation, alle Daten wurden zuvor abgerufen (oder wenn Sie nicht kürzlich abgerufen haben, werden Sie mit der Arbeit an einer veralteten Version beginnen). Ursprünglich ist der Inhalt des Tracking-Zweigs identisch mit dem Remote-Zweig. Der Tracking-Zweig kann jedoch lokal von Ihnen geändert werden.

Der Arbeitsbereich von git enthält den Zustand eines Zweigs zur Zeit. Daher ist Ihre Frage nach dem gleichzeitigen Auschecken aller entfernten Zweigstellen im Zusammenhang mit git nicht wirklich sinnvoll. Sie können sie nacheinander auschecken. Jedes Mal, wenn Sie das nächste auschecken, verschwindet das vorherige aus dem Arbeitsbereich. Natürlich kann diese Operation wie in gezeigt skriptiert werden. Verfolgen Sie alle Remote-Git-Zweige als lokale Verzweigungen

Könnte die Frage durch ein Missverständnis verursacht werden, vorausgesetzt, dass entfernte Zweigstellen nur aus der Ferne gespeichert werden, jedoch nicht lokal, und Sie möchten nur sicherstellen, dass Sie alles lokal haben? Wenn Sie wirklich mehrere Zweigstellen gleichzeitig auschecken möchten, können Sie Ihr Repo lokal klonen und verschiedene Zweigstellen in verschiedenen Arbeitsbereichen auschecken. (2)

Kurz: Wenn Sie sicherstellen möchten, dass alle lokal verfügbaren Daten im Remote-Repo vorhanden sind, verwenden Sie einfach git fetch [repo]. Wenn Sie keine Änderungen an Ihrer Konfiguration vorgenommen haben, werden alle Verzweigungen abgerufen, d.

(1) Dies trifft auf einfache Standardfälle zu. In komplizierteren Fällen mit mehr als einer entfernten oder manuell konfigurierten Fernbedienung benötigen Sie möglicherweise die Option --track, um genau anzugeben, was Sie möchten. 

(2) Für diesen Anwendungsfall gibt es eine neue Funktion git worktree. Ab Anfang 2018 ist es jedoch noch experimentell ausgeprägt

17
Uwe Geuder

Sie sollten etwas wie versuchen: -

$ git fetch --all
$ for branch in `git branch -r | cut -d '/' -f2-` ; do git checkout $branch && git pull Origin $branch ; done
2
Mr. Pundir

Ich habe das schon immer benutzt und es funktioniert perfekt 

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