Das Verfolgen eines einzelnen Remote-Zweigs als lokaler Zweig ist recht einfach.
$ git checkout --track -b ${branch_name} origin/${branch_name}
Es ist auch einfach, alle lokalen Zweige auf die Fernbedienung zu verschieben und bei Bedarf neue Fernzweige zu erstellen.
$ git push --all origin
Ich möchte das Gegenteil tun. Wenn ich X Anzahl von Remote-Zweigen an einer einzigen Quelle habe:
$ git branch -r
branch1
branch2
branch3
.
.
.
Kann ich lokale Tracking-Zweige für alle diese Remote-Zweige erstellen, ohne dass jeder manuell erstellt werden muss? Sagen Sie etwas wie:
$ git checkout --track -b --all origin
Ich habe gegoogelt und RTMs, bin aber bisher in die Koje gekommen.
git checkout --track origin/branchname
git pull origin
und drücken Sietab
, um eine Liste der entfernten Zweige zu erhalten. Dann tippen Sie weiter und drücken Siereturn
.Antworten:
Bash verwenden:
nach git 1.9.1 vor git 1.9.1Aktualisieren Sie die Zweige, vorausgesetzt, es gibt keine Änderungen an Ihren lokalen Tracking-Zweigen:
Ignorieren Sie die mehrdeutigen Refname-Warnungen. Git scheint den lokalen Zweig so zu bevorzugen, wie er sollte.
quelle
git pull
einen--all
Schalter, mit dem alle verfolgten Zweige abgerufen und zusammengeführt werden .Die Antwort von Otto ist gut, aber alle erstellten Zweige haben "Ursprung /" als Anfang des Namens. Wenn Sie nur möchten, dass der letzte Teil (nach dem letzten /) Ihre resultierenden Zweignamen sind, verwenden Sie Folgendes:
Es hat auch den Vorteil, dass Sie keine Warnungen vor mehrdeutigen Verweisen erhalten.
quelle
grep -v master
wie wäre esgrep -v /HEAD
? Dies scheint den Standardzweig herauszufiltern, ohne dass eine Anpassung erforderlich istDie meisten Antworten hier erschweren das Parsen der Ausgabe von
git branch -r
. Sie können Folgendes verwendenfor
Schleife die Tracking-Zweige wie für alle Zweige auf der Fernbedienung erstellen.Beispiel
Angenommen, ich habe diese entfernten Zweige.
Stellen Sie sicher, dass wir lokal noch nichts anderes als den Master verfolgen:
Mit diesem einen Liner können Sie die Tracking-Zweige erstellen:
Bestätigen Sie nun:
So löschen Sie sie:
Wenn Sie den
-vv
Schalter verwenden, könnengit branch
Sie Folgendes bestätigen:Aufschlüsselung der for-Schleife
Die Schleife ruft im Grunde den Befehl auf
git branch -r
und filtert mit HEAD oder Master-Zweigen in der Ausgabe herausgrep -vE "HEAD|master"
. Um nur die Namen der Zweige abzüglich derorigin/
Teilzeichenfolge zu erhalten, verwenden wir die String-Manipulation von Bash${var#stringtoremove}
. Dadurch wird die Zeichenfolge "stringtoremove" aus der Variablen entfernt$var
. In unserem Fall entfernen wir die Zeichenfolgeorigin/
aus der Variablen$i
.HINWEIS: Alternativ können
git checkout --track ...
Sie dies auch verwenden:Diese Methode interessiert mich jedoch nicht besonders, da sie Sie beim Auschecken zwischen den Zweigen wechselt. Wenn Sie fertig sind, bleiben Sie auf dem letzten Zweig, den es erstellt hat.
Verweise
quelle
Update Q1 2020: Mohsen Abasi schlägt in den Kommentaren auf der Grundlage der Antwort des slm 2014 die einfachere Alternative vor:
Und es werden
$()
anstelle veralteter Backticks verwendet .Wie ich in erwähnen eine andere alte Antwort , mit
git for-each-ref
ist wahrscheinlich schneller .Und ich würde den neuen
git switch
Befehl (Git 2.23+) verwenden , der die Verwirrung ersetztgit checkout
.Auf diese Weise nicht
grep
benötigt.Alte (2011) ursprüngliche Antwort:
Hier ist mein Einzeiler, den ich benutze (in einer Bash-Shell, getestet mit msysgit1.7.4):
Zum Kopieren und Einfügen:
Für mehr Lesbarkeit:
remote
Variablen angegeben haben (es kann 'origin
' sein oder ein beliebiger Name, den Sie für eine der Fernbedienungen Ihres aktuellen Git-Repos festgelegt haben).origin/a/Branch/Name => a/Branch/Name
durch denawk
Ausdruck.Der Upstream-Zweig wird durch
--set-upstream-to
(oder-u
) gesetzt , nicht--track
:Der Vorteil ist, dass der Zweig, wenn er bereits vorhanden ist, nicht fehlschlägt und den Ursprung des Zweigs nicht ändert, sondern nur die
branch.xxx.(remote|merge)
Einstellung konfiguriert .Dieser Befehl erstellt lokale Zweige für alle Remote-Upstream-Zweige und setzt deren Remote- und Zusammenführungseinstellung auf diesen Remote-Zweig.
quelle
--set-upstream-to
anstatt von--track
obwohl.git switch
stattdessen zu verwendengit checkout
. Aber deine (sehr gute) Idee bleibt.Sie könnten das leicht genug schreiben, aber ich weiß nicht, wann es wertvoll sein würde. Diese Zweige würden ziemlich schnell zurückfallen, und Sie müssten sie ständig aktualisieren.
Die Remote-Zweige werden automatisch auf dem neuesten Stand gehalten. Daher ist es am einfachsten, den lokalen Zweig an der Stelle zu erstellen, an der Sie tatsächlich daran arbeiten möchten.
quelle
git up
aktualisiert alle lokalen Filialen.quelle
| grep -v HEAD
der Pipeline ein hinzufügen , damit es richtig funktioniert.ohne Scripting (in einem leeren Verzeichnis):
Danach werden alle Remote-Zweige als lokal angesehen.
Original (auf Russisch) .
quelle
Wenn Sie Powershell verwenden möchten und Ihre Fernbedienung als Ursprung bezeichnet wird. Dann funktioniert das.
quelle
git svn clone'd
Repo funktioniert :git branch -r | %{$_ -replace " origin/"} | %{git checkout -b $_ "origin/$_"}
git branch -r | %{$_ -replace " origin/"} | %{git branch -u "origin/$_" $_}
Verwenden Sie diese Option, und Sie erhalten keine Warnung wie: refname 'origin / dev' ist nicht eindeutig
quelle
Hier ist meine Lösung des BASH-Befehls, auf den @tjmcewan verweist:
Mein Ziel ist es, das Problem zu lösen, dass alle erstellten Zweige "origin /" als Anfang des Namens haben, da ich getestet habe, dass $ remote-Variablen immer noch "origin /" enthalten:
quelle
Rufen Sie dies aus einer Batch-Datei auf, um dasselbe wie die Antwort von tjmcewan unter Windows zu tun :
Oder dies über die Kommandozeile :
quelle
Ab Git 2.23:
Das
-C
Flag zumgit switch
Erstellen oder Zurücksetzen, falls es bereits vorhanden ist.Git Switch Dokumentation
quelle
Falls Sie bereits einige Filialen ausgecheckt haben und möchten
Sie können das folgende bash- und zsh-kompatible Skript verwenden:
quelle
Erläuterung:
Zeile 1: 'git branch -r' (gefolgt von 'git remote update', um die Informationen zu Änderungen an remote zu aktualisieren) listet alle Remote-Zweige auf; 'egrep -vw' wird verwendet, um Einträge mit HEAD und Master im Ergebnis anzuklopfen.
Zeile 3: Verfolgen Sie den benannten Remote-Zweig, während Sie ihn lokal auschecken. Ein einfaches awk wird verwendet, um zu vermeiden, dass 'origin /' das Suffix für lokale Zweige ist.
quelle
Wenn Sie mit bash alle Zweige auschecken möchten:
Es ist wichtig zu beachten, dass Sie beim Abrufen, bei dem neue Remote-Tracking-Zweige heruntergefahren werden, nicht automatisch über lokale, bearbeitbare Kopien davon verfügen.
quelle