543 Stimmen

Beim Ausführen von 'git push', was macht '--set-upstream'?

Was macht git --set-upstream?

Ich habe versucht, es zu verstehen, indem ich das git Handbuch gelesen habe, aber ich habe es nicht ganz verstanden.

651voto

TheCodeArtist Punkte 20369

Um Verwirrung zu vermeiden,
veraltete Versionen von git diese etwas mehrdeutige --set-upstream-Option
zugunsten einer ausführlicheren --set-upstream-to-Option,
die die gleiche Syntax und das gleiche Verhalten aufweist.
[ Referenz ]


git branch --set-upstream-to 

legt den Standard-Fernbranch für den aktuellen lokalen Branch fest.

Jeder zukünftige git pull Befehl (mit dem aktuellen lokalen Branch ausgecheckt),
wird versuchen, Commits vom in den aktuellen lokalen Branch zu übernehmen.


Ein Weg, um zu vermeiden, dass man explizit --set-upstream / --set-upstream-to eingeben muss, ist die Verwendung der Abkürzung -u wie folgt:

git push -u origin local-branch

Dadurch wird die Verknüpfung für zukünftige Push-/Pull-Versuche automatisch festgelegt.
Für weitere Details schaue dir diese detaillierte Erklärung zu Upstream-Branches und Tracking an.

74voto

Will Punkte 4414

Wenn Sie auf einen Remote drücken und die --set-upstream Flagge verwenden, setzt git den Branch, den Sie drücken, als den Remote-Tracking-Branch des Branches, den Sie drücken.

Das Hinzufügen eines Remote-Tracking-Branches bedeutet, dass git dann weiß, was Sie in Zukunft tun möchten, wenn Sie git fetch, git pull oder git push ausführen. Es geht davon aus, dass Sie den lokalen Branch und den Remote-Branch, den er verfolgt, synchron halten möchten, und führt die entsprechenden Maßnahmen durch, um dies zu erreichen.

Sie könnten das Gleiche mit git branch --set-upstream-to oder git checkout --track erreichen. Weitere Informationen finden Sie auf den Git-Hilfeseiten zu Tracking-Branches.

29voto

Turbut Alin Punkte 2558

git branch --set-upstream <> wird offiziell nicht mehr unterstützt und wird durch git branch --set-upstream-to <> ersetzt

9voto

Piyush Singhania Punkte 140

--set-upstream wird verwendet, um einen Branch lokal einem Branch auf dem Remote zuzuordnen, sodass Sie einfach git push oder git pull ausführen können und es wissen wird, von welchem Branch gepusht/gezogen werden soll

Für das Hinzufügen eines Remote-Repositories verwende ich diese Befehle

  • Überprüfen Sie zuerst Ihre Remote-Repositories mit git remote -v
  • Wenn Sie upstream nicht sehen können, verwenden Sie git remote add upstream
  • Überprüfen Sie erneut Ihre Remote-Repositories mit git remote -v

Indem Sie dieselben Befehle wie oben verwenden, ist es möglich, mehrere Remotes zu einem lokalen Repository zu haben.

Ändern Sie einfach den Namen upstream git remote add NAME

4voto

Daniel K. Punkte 710

Ich gehe davon aus, dass deine Frage lautet:

Was macht git push --set-upstream ?

Wie du siehst, gehe ich davon aus, dass der betreffende git Befehl git push ist. Ich hoffe, das ist das, was du gemeint hast. Um die Antwort zu vereinfachen, habe ich weiter spezifiziert, dass der lokale Branch , auf dem du dich befindest, den gleichen Namen hat wie der Remote-Branch auf deinem Upstream-Repository , an den du pushst. Schließlich nehme ich eine allgemeine git-Konfiguration an.

Das ist also meine Antwort:

Neben der Operation, die ein git push ohne die Option --set-upstream durchführt, macht diese Option git push dazu, mindestens zwei Konfigurationsvariablen zu setzen:

  • branch..remote =
  • branch..merge = /refs/heads/

Das ist alles, was dieser Befehl macht. Er speichert Upstream-Informationen (d.h. Remote-Repository und Branch) für den lokalen Branch in Konfigurationsvariablen.

Upstream-Informationen werden unter dem lokalen Branch-Namen gespeichert. Wenn dein lokaler Branch main heißt, sind die entsprechenden Konfigurationsvariablen branch.main.remote und branch.main.merge. Basierend auf der Art und Weise, wie diese Upstream-Informationen gespeichert werden, kann ein lokaler Branch höchstens ein einziges Set von Upstream-Informationen haben.

Du kannst überprüfen, ob eine dieser Konfigurationsvariablen gesetzt ist, indem du git config --get-regexp ^branch\. verwendest. Dies gibt alle Variablen aus, die mit "branch." beginnen.

Das eigentliche Geschehen tritt auf, wenn diese Konfigurationsvariablen von, z.B., git fetch, git pull oder git push verwendet werden, um das Remote-Repository und den Remote-Branch für einen lokalen Branch herauszufinden, wenn du sie nicht explizit auf der Kommandozeile angibst. Das bedeutet, wenn diese Konfigurationsvariablen gesetzt sind, kannst du einfach git push ausführen und git wird (unter Verwendung dieser Variablen) das Remote-Repository und den Upstream-Branch kennen.

Empfohlene weitere Lektüre:

Aber Vorsicht bei git Eigenheiten:

Wenn als URL oder Dateipfad angegeben ist, siehe zum Beispiel dieses Beispiel:

git push --set-upstream git@gitlab.example.com:namespace/myproject.git master

git push erstellt keine Referenz zum Remote-Branch-Kopf in .git/refs/remotes/

Nur wenn dem Upstream-Repository ein Name mittels

git remote add  

gegeben wurde und git push --set-upstream mit diesem Namen verwendet wurde, ist die volle Kraft von Remote-Tracking-Branches in allen git-Befehlen verfügbar.

Empfohlene weitere Lektüre:

FYI: alle Befehle wurden mit git V2.32 unter Windows getestet.

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