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.
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.
Um Verwirrung zu vermeiden,
veraltete Versionen vongit
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.
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.
--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
git remote -v
git remote add upstream
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
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:
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 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.