767 Stimmen

Git für Pull und Push aller Zweige einrichten

Ich möchte standardmäßig alle Zweige, einschließlich der neu erstellten, pushen und ziehen.

Gibt es eine Einstellung, die ich dafür festlegen kann?

Ansonsten, wenn ich lokal einen neuen Zweig hinzufüge und ihn vom Server abrufen möchte, wie kann ich das am einfachsten tun?

Ich habe eine neue Verzweigung mit dem gleichen Namen erstellt und versucht zu ziehen, aber es funktioniert nicht. Er fragt mich nach der gesamten Remote-Konfiguration des Zweigs. Wie stelle ich sie ein.

5 Stimmen

"und versucht zu ziehen, aber es funktioniert nicht". Details bitte. Zeigen Sie uns, welchen Befehl Sie versucht haben zu verwenden.

11voto

abulka Punkte 879

Wenn Sie alle Zweige von einem alten Projektarchiv in ein neues Projektarchiv verschieben, müssen Sie in Ihrem lokalen Projektarchiv die Nachverfolgung der einzelnen Zweige zu den bestehenden Ursprungszweigen einrichten, bevor Sie sie in das neue Projektarchiv verschieben, ansonsten todo werden Ihre Ursprungszweige nicht im neuen Ursprung erscheinen. Tun Sie dies manuell, indem Sie jeden Zweig verfolgen oder auschecken, oder verwenden Sie den One-Liner:

for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done

Dieser einzeilige Befehl basiert auf den Versionen in anderen Antworten auf dieser Seite, ist aber wohl besser, weil:

  1. er richtet die Verzweigungsverfolgung korrekt ein, im Gegensatz zu einigen älteren Varianten dieses Befehls auf dieser Seite, die nur einen Parameter an --track übergeben und somit jede Verzweigung am Ende dem Master folgt - nicht gut
  2. benennt die lokalen Zweige ohne das Präfix "origin/", was ich persönlich nicht möchte - und ist konsistent mit dem, was passiert, wenn man einen Zweig normal auscheckt.
  3. überspringt das Tracking des Masters, da dies bereits geschieht
  4. nicht wirklich etwas auscheckt und daher schnell ist
  5. verhindert, dass man über das -> in der Ausgabe von git branch -r stolpert

Wenn Sie den Ursprung wechseln, ersetzen Sie den Link zum alten Ursprung und zeigen Sie auf eine neue Fernbedienung. Stellen Sie sicher, dass Sie die neue Remote zuerst mit der Bitbucket/Github-GUI erstellen, aber fügen Sie ihr keine Dateien hinzu, sonst gibt es ein Problem beim Zusammenführen. z.B..

git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git

Jetzt drücken. Beachten Sie, dass der zweite Befehl erforderlich ist, um auch die Tags zu pushen:

git push -u --all origin
git push --tags origin

8voto

tom Punkte 109

Ich habe die beste und einfachste Methode gefunden ici wie @kumarahul gepostet hat, funktioniert bei mir wie ein Zauber, es werden alle Tags und Zweige vom Ursprung auf die neue Remote übertragen:

git remote add newremote new-remote-url

git push newremote --tags refs/remotes/origin/*:refs/heads/*

Ich habe 'git push --all -u newremote' verwendet, aber es werden nur die ausgecheckten Zweige auf newremote übertragen.

Git: Alle Zweige auf eine neue Remote verschieben

von Keith Dechant , Software-Architekt

Hier ist ein Szenario, das einige von Ihnen vielleicht schon mit Ihren Git Repositories begegnet sein. Sie haben eine Arbeitskopie eines Git-Repositories, beispielsweise von einem alten Server. Aber Sie haben nur die Arbeitskopie, und der Ursprung ist nicht zugänglich. Sie können es also nicht einfach forken. Sie wollen aber die gesamte Projektarchiv und die gesamte Historie der Verzweigung auf Ihren neuen Server übertragen.

Dies ist möglich, wenn Ihre Arbeitskopie die Verfolgungszweige enthält aus dem alten Remote-Zweig enthält (origin/branch1, origin/branch1, etc.). Wenn Sie das tun, haben Sie das gesamte Repo und die Historie.

In meinem Fall gab es jedoch Dutzende von Filialen, und einige oder alle davon die ich noch nie vor Ort überprüft hatte. Sie alle anzusteuern schien eine schwere Aufgabe. Wie sollte man also vorgehen?

Ich habe zwei Optionen identifiziert:

Option 1: Jeden Zweig überprüfen und pushen Ich könnte dies tun, und ich könnte sogar ein sogar ein Bash-Skript schreiben, das dabei hilft. Allerdings würde dies bei jedem Checkout meine Arbeitsdateien bei jedem Auschecken ändern und einen lokalen Zweig für für jeden der entfernten Verzweigungen erstellen. Dies wäre bei einer großen Repo.

Option 2: Push ohne Änderung der Arbeitskopie Es gibt eine zweite Alternative, die kein Auschecken der einzelnen Zweige erfordert, keine fremde Zweige in der Arbeitskopie erzeugt und nicht einmal die die Dateien in der Arbeitskopie verändert.

Wenn Ihre alte, nicht mehr aktive Fernbedienung "oldremote" heißt und Ihre neue Fernbedienung "newremote" heißt, können Sie nur die entfernten Verfolgungszweige mit diesem Befehl pushen:

git push newremote refs/remotes/oldremote/*:refs/heads/*

In einigen Fällen ist es auch möglich, nur eine Teilmenge der Zweige zu verschieben. Wenn die Namen der Zweige mit einem Schrägstrich versehen sind (z.B., oldremote/features/branch3, oldremote/features/branch4, usw.), können Sie nur die entfernten Verfolgungszweige pushen, deren Namen mit "oldremote/features" beginnen:

git push newremote refs/remotes/oldremote/features/*:refs/heads/features/*

Ob Sie alle Zweige oder nur einige von ihnen pushen, führt Git den Git führt den gesamten Vorgang durch, ohne neue lokale Zweige zu erstellen und ohne Änderungen an Ihren Arbeitsdateien vorzunehmen. Jeder Tracking-Zweig, der Ihrem Muster entspricht, wird in den neuen entfernten Zweig verschoben.

Weitere Informationen zu diesem Thema finden Sie in diesem Thread auf Stack Überlauf.

Datum der Veröffentlichung: Oktober 9, 2017

7voto

tokhi Punkte 19702

Um alle Zweige zu sehen, ohne dass Sie git branch -a sollten Sie ausführen:

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

Jetzt können Sie alle Zweige sehen:

git branch

Versuchen Sie, alle Zweige zu verschieben:

git push --all

1 Stimmen

Git fetch --all origin fatal: fetch --all akzeptiert kein Repository-Argument

0 Stimmen

Versuchen Sie git fetch --all ?

4voto

kumarahul Punkte 311

Wenn Sie einen Push von einem entfernten Ursprung zu einem anderen durchführen, können Sie dies verwenden:

git push newremote refs/remotes/oldremote/*:refs/heads/*

Das hat bei mir funktioniert. Beziehen Sie sich auf dies: https://www.metaltoad.com/blog/git-push-all-branches-new-remote

4voto

Amir Punkte 1503

Die vollständige Prozedur, die bei mir für die Übertragung funktionierte ALLE Zweige und Tags ist, die Antworten von @vikas027 und @kumarahul zu kombinieren:

~$ git clone <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin --mirror
~$ git push new-origin refs/remotes/origin/*:refs/heads/*
~$ git push new-origin --delete HEAD

Der letzte Schritt ist, weil ein Zweig namens HEAD erscheint in der neuen Fernbedienung aufgrund des Platzhalters

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X