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.

1voto

VonC Punkte 1117238

--set-upstream geht nicht nur um git branch -u oder git push -u.

Du hast auch git fetch --set-upstream und git pull --set-upstream.

Wenn der Remote erfolgreich geholt wird, füge den Upstream (Tracking)-Verweis hinzu, der von argumentlosen git pull und anderen Befehlen verwendet wird

Es wird eingestellt:

  • branch..remote
  • branch..merge

Dadurch kann git push wissen, wohin gepusht werden soll, und auf welchen Remote-Branch.

Aber: "git fetch --set-upstream"(man) hat nicht überprüft, ob es einen aktuellen Branch gibt, was zu einem Segfault führt, wenn es auf einem detached HEAD ausgeführt wird, was mit Git 2.35 (Q1 2022) behoben wurde.

Siehe Commit 17baeaf (07. Dez 2021) von Ævar Arnfjörð Bjarmason (avar).
(Eingefügt von Junio C Hamano -- gitster -- in Commit dcaf17c, 22. Dez 2021)

pull, fetch: Fehler bei segfault in --set-upstream-Option

Gemeldet von: Clemens Fruhwirth
Gemeldet von: Jan Pokorný
Unterzeichnet von: Ævar Arnfjörð Bjarmason

Behebe einen segfault in der --set-upstream-Option, hinzugefügt in 24bc1a1 (pull, 19. Aug 2019, Git v2.24.0-rc0 -- Merge aufgeführt in batch #2) (pull, fetch: Add(man) --set-upstream-Option, 19. Aug 2019) hinzugefügt in v2.24.0.

Der dort hinzugefügte Code hat nicht die gleiche Überprüfung durchgeführt wie wir sie für "git branch"(man) selbst machen, da 8efb889 ("Branch: segfault fixes and validation", 23. Feb 2013, Git v1.8.3-rc0 -- Merge aufgeführt in batch #2), was wiederum den gleichen Segfault-Typ behoben hat, den ich jetzt in "git branch --set-upstream-to"(man), siehe 6183d82 ("branch: --set-upstream-to einfügen", 20. Aug 2012, Git v1.8.0-rc0 -- Merge aufgeführt in batch #5).

Die hier hinzugefügte Warnmeldung ist eine Zusammenstellung des Fehlers, der für "git branch" in 8efb889 hinzugefügt wurde, und der Fehlerausgabe, die install_branch_config() selbst ausgibt, d.h.
es entfernt "refs/heads/" aus dem Namen und sagt "branch X on remote", nicht "branch refs/heads/X on remote".

Neue Warnung:

Konnte den Upstream von HEAD nicht auf 'X' von 'X' setzen 
wenn er nicht auf einen Branch zeigt

Ich denke, es würde mehr Sinn machen, hier einfach sterben(), aber in den anderen Überprüfungen für --set-upstream hinzugefügt in 24bc1a1, geben wir stattdessen eine Warnung() aus.
Lass uns das hier vorerst aus Konsistenzgründen genauso machen.

Es gab eine früher eingereichte alternative Möglichkeit, dies in diesem Thread zu beheben, aufgrund dessen das Patchen das Threading mit dem ursprünglichen Bericht in diesem Thread unterbrochen hat.
Ich habe es nicht bemerkt, bevor ich diese Version verfasst habe.
Ich denke, die hier detailliertere Warnmeldung ist besser, und wir sollten auch Tests für dieses Verhalten haben.

Die --no-rebase-Option für "git pull"(man) wird benötigt seit dem kürzlich fusionierten 7d0daf3 ("Merge Zweig 'en/pull-conflicting-options'", 30. Aug 2021, Git v2.34.0-rc0 -- Merge aufgeführt in batch #2).

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