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.

1574voto

brimble2010 Punkte 17138

Der einfachste Weg ist, dies zu tun:

git push --all origin

Dadurch werden Tags und Zweige verschoben.

15 Stimmen

Unter Dutzenden von Antworten, die ich auf SO und an anderen Stellen gefunden habe, ist dies der einfachste Weg, einen neu erstellten lokalen Zweig zu pushen, ohne die Konfiguration zu verändern. Danke!

198 Stimmen

Und wenn Sie hinzufügen -u einmal, z.B. git push --all origin -u ist die Verfolgung eingerichtet, und danach können Sie einfach mit git push .

30 Stimmen

Für die Git-Version 1.7.12.3 musste ich git push --tags origin um alle Tags zu verschieben.

156voto

Jakub Narębski Punkte 286531

Mit modernem Git können Sie immer alle Zweige abrufen (als Remote-Tracking-Verzweigungen in refs/remotes/origin/* Namespace, sichtbar mit git branch -r o git remote show origin ).

Standardmäßig (siehe Dokumentation von push.default Konfigurationsvariable) drücken Sie passende Branchen Das bedeutet, dass Sie zunächst Folgendes tun müssen git push origin branch für Git, um es immer zu pushen git push .

Wenn Sie möchten, dass immer alle Zweige verschieben können Sie Push-Refspec einrichten. Angenommen, die Fernbedienung heißt origin können Sie entweder Git-Konfiguration :

$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'

oder direkt bearbeiten .git/config Datei in etwa wie folgt aussehen:

\[remote "origin"\]
        url = user@example.com:/srv/git/repo.git
        fetch = +refs/heads/\*:refs/remotes/origin/\*
        fetch = +refs/tags/\*:refs/tags/\*
        push  = +refs/heads/\*:refs/heads/\*
        push  = +refs/tags/\*:refs/tags/\*

3 Stimmen

@Merc: git push --all origin ist gut für die einmalige Veröffentlichung aller Zweige und Tags, obwohl die Standardeinstellung bis zur aktuellen Version "übereinstimmende" Semantik bedeuten würde, dass Sie alle Zweige danach pushen würden... es sei denn, Sie fügen neue Zweige oder Tags hinzu. Die Einstellung à "Alle Zweige standardmäßig pushen" [...] ist wie geschrieben.

0 Stimmen

Sie könnten die Antwort verbessern und die Möglichkeit hinzufügen, Git auf diese Weise neu zu konfigurieren. Dies ist nützlich für Benutzer, die den einfachen Modus eingestellt haben.

3 Stimmen

Dies hat sich seit Git 2.0 geändert. Push-Standard ist einfach, nicht mehr passend.

41voto

vikas027 Punkte 4402

Ich hatte die folgenden Befehle verwendet, um alle Zweige in das neue Repository zu migrieren.

~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin master
~$ git push new-origin --mirror

ANMERKUNG : Ich musste den vorletzten (d.h. push master first) Befehl beim Klonen eines Repo von Atlassian verwenden Versteck zu AWS CodeCommit (leeres Repo). Ich bin nicht sicher, der Grund, aber nach dem Schieben ( git push new-origin --mirror ) die Standardverzweigung auf eine andere Verzweigung als master .

1 Stimmen

Perfekt, um ein Repo auf einen anderen Host zu verschieben. Dankeschön!

2 Stimmen

Dies ist in der Tat die einzig sinnvolle Methode. Verwenden Sie git push new_origin --all nur Ihre aktuellen lokalen Zweige nach new_origin verschieben, nicht alle Zweige von origin.

0 Stimmen

Ich stelle nur fest, dass dies eine --bare Repository, das sich ein wenig von einem normalen Repository unterscheidet, hat es nur die .git Dateien, nicht Ihre Dateien. Es ist vollkommen ausreichend, wenn Sie nicht darin arbeiten. Siehe --bare y --mirror git-scm.com/docs/git-clone .

34voto

Mark Reed Punkte 341

Das + in die Push-Spezifikation aufzunehmen ist wahrscheinlich eine schlechte Idee, da es bedeutet, dass Git gerne einen nicht-schnellen Push durchführt auch ohne -f und wenn der entfernte Server so eingestellt ist, dass er diese akzeptiert, können Sie den Verlauf verlieren.

Versuchen Sie nur dies:

$ git config --add remote.origin.push 'refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push 'refs/tags/*:refs/tags/*'
$ git config --add remote.origin.fetch 'refs/heads/*:refs/remotes/origin/*'
$ git config --add remote.origin.fetch 'refs/tags/*:refs/tags/*'

0 Stimmen

Sie können auch die --global um dies zum globalen Standard für alle Ihre Repositories zu machen.

0 Stimmen

Es ist bedauerlich, dass das + automatisch von Git hinzugefügt wird, wenn man git remote add .

16voto

Lance Cleveland Punkte 3030

Wenn Sie Zweige von einem alten Projektarchiv in ein neues Projektarchiv verschieben und NICHT alle Zweige des alten Projektarchivs vor Ort haben, müssen Sie sie zuerst verfolgen.

for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done

Fügen Sie dann Ihr neues Remote Repo hinzu:

git remote add bb <path-to-new-repo>

Dann können Sie alle mit diesem Befehl verschieben:

git push -u bb --all

Sie können das Projektarchiv auch mit den in den anderen Antworten erwähnten git config-Befehlen konfigurieren, wenn Sie dies nicht nur einmal tun oder nur lokale Zweige verschieben möchten.

Der wichtige Punkt ist, dass die anderen Antworten nur alle LOKALEN Zweige pushen. Wenn die Zweige nur in einem alternativen REMOTE-Repository existieren, werden sie nicht verschoben, ohne sie zuerst zu verfolgen. Die hier vorgestellte for-Schleife wird dabei helfen.

0 Stimmen

Übrigens verwende ich hier "bb" anstelle von "origin", weil ich davon ausgehe, dass Ihr ursprüngliches/altes Repository "origin" hieß und wahrscheinlich immer noch mit dieser Bezeichnung verbunden ist. "bb" steht für Bitbucket, wohin ich mein ursprüngliches Repository verschoben habe, aber Sie können es auch "neworigin" nennen, wenn Sie das bevorzugen.

4 Stimmen

Das hat bei mir nicht funktioniert. Es endete damit, dass alle entfernten Zweige denselben lokalen Zweig verfolgten :/

4 Stimmen

AFAIK sollte dies nicht funktionieren, wie pro @jhsowter Kommentar. der richtige Befehl für mich einen Remote-Zweig in einem neu geklonten Repo zu verfolgen ist git branch --track reponame origin/reponame andernfalls werden alle entfernten Zweige auf den aktuellen lokalen Zweig zurückgeführt

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