Die Manpage für git-config listet diese Optionen für push.default auf:
nothing - do not push anything.
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - push the current branch to a branch of the same name.
In den meisten Fällen würde ich davon ausgehen, dass das Verschieben in den Upstream-Zweig eines Zweigs dasselbe ist wie das Verschieben in einen Zweig mit demselben Namen, da der Upstream-Zweig normalerweise denselben Namen hat und der Zweig mit demselben Namen ("aktuell"). ) wäre normalerweise (oder immer per Definition?) vorgelagert. Was ist der Unterschied?
UPDATE : Die man - Seite für git-config wird aktualisiert (wie man erwarten würde), so dass die Unterscheidungen es kann jetzt viel klarer.
git
git-branch
git-push
Bilderstürmer
quelle
quelle
push.default is unset; its implicit value is changing in Git 2.0
und zumatching
vs findensimple
Sie unter stackoverflow.com/questions/13148066/…Antworten:
Sie haben den Unterschied in Ihrer Frage zusammengefasst.
upstream
wird an den konfigurierten Upstream-Zweig weitergeleitet, währendcurrent
davon ausgegangen wird , dass der Upstream-Zweig denselben Namen wie der aktuelle lokale Zweig hat, und an diesen bestimmten Namen gesendet wird. In Wirklichkeit gibt es keinen Grund anzunehmen, dass der Upstream-Tracking-Zweig eines lokalen Zweigs denselben Namen hat wie der lokale Zweig selbst.Wenn Sie beispielsweise in mehreren Repositorys oder in mehreren gemeinsam genutzten Entwicklerfernbedienungen arbeiten, verfolgen Sie häufig verschiedene Gabeln desselben Zweigs, z. B.
allen-master
odersusan-master
, die beide denmaster
Zweig in den Repos von Allen bzw. Susan verfolgen . In diesem Fallcurrent
wäre dies die falsche Einstellung, da diese Zweigstellennamen auf ihren Fernbedienungen nicht vorhanden sind.upstream
würde jedoch gut funktionieren.Ein praktischeres Beispiel könnte das Verfolgen von a
development
undproduction
Repository sein. Ihr Workflow verwendet möglicherweise für jeden einen anderen Hauptzweig, dies kann jedoch verwirrend werden. Angenommen, Sie waren ein Code-Integrator und wollten diemaster
Zweige beider Repositorys getrennt verfolgen .Jetzt haben Sie zwei Zweige, die ihre jeweiligen Repositorys verfolgen, von denen keiner die
master
Namenskonvention verwendet. Es gibt wenig Verwirrung über die Filialnamen: Sie beschreiben explizit, was sie verfolgen. Dennochpush.default = current
würde keinen Sinn machen , da weder Fern einen enthältdevelopment
oderproduction
Zweig.quelle
upstream
es vorgezogen wirdcurrent
. Ich denke, es ist ziemlich offensichtlich, deshalb sollten Sie lieber ein Beispiel für den umgekehrten Fall geben.current
ist besser für den Fall, dass Sie ein neuer Entwickler sind, weil Sie nichtgit config
viel brauchen, besonders wenn Sie von irgendwoher geklont haben.current
Pushs zu oder Erstellen-dann-Pushes-zu-gleichnamigen Zweigen auf dem Remote-Repo für Sie, wenn sie noch nicht vorhanden sind, wohingegensimple
dies sofort abgelehnt wird, wenn ein gleichnamiger Zweig noch nicht vorhanden ist.upstream
hat in diesem Fall das gleiche Verhalten, es sei denn, ein Upstream-Zweig wurde explizit oder anderweitig festgelegt, wie in Yawars Antwort erwähnt.current
schiebt den aktuellen Zweig zu einem Zweig mit demselben Namen auf dem Remote-Repo.upstream
schiebt den aktuellen Zweig in den vorgelagerten Zweig.Der Upstream-Zweig ist ein Zweig, der explizit oder implizit als Upstream von Ihrem aktuellen Zweig definiert wurde. Das bedeutet, dass Push and Pull standardmäßig mit diesem Zweig synchronisiert wird. Der Upstream-Zweig befindet sich möglicherweise im selben Repo wie der aktuelle Zweig selbst. Sie können interessante Dinge tun, z. B. Ihren lokalen Hauptzweig vor Ihrem lokalen Feature-Zweig (Thema) einrichten und zwischen ihnen verschieben und ziehen.
Das implizite Upstream-Setup erfolgt über den
branch.autosetupmerge
Konfigurationswert. Dokumentation finden Sie auf dergit config
Hilfeseite. Das explizite Upstream-Setup erfolgt mit der-u
Option zumgit branch
Befehl. Weitere Informationen finden Sie auf der Hilfeseite.quelle
branch.autoSetupMerge
nicht das gleiche wie-u
/--set-upstream
. Zumindest sehe ich in der Dokumentation nichts, was darauf hindeutet, dass sich Git Push so verhält, als ob es-u
standardmäßig aufgerufen worden wäre, was es mir scheint, wie Sie sagen. Können Sie klarstellen, was Sie meinten?branch.autoSetupMerge
auschecken , erstellt die Konfiguration standardmäßig einen neuen lokalen Zweig und legt dessen Upstream als Remote-Tracking-Zweig fest. Diese implizite Aktion kann explizit ausgeführt werden, indem entweder die Flags-t
(--track
) oder-u ...
(--set-upstream-to=...
) verwendet werden, die dasselbe mit leicht unterschiedlichen Syntaxen tun.git push
, habe ich (fälschlicherweise) angenommen, dass Sie über die-u
Option vongit push
und nicht über die-u
Option von gesprochen habengit branch
. Entschuldigung für die Verwirrung :)