Git: Welches ist die standardmäßig konfigurierte Fernbedienung für den Zweig?

192

Ich habe ein Remote-Bare-Repository hub. Ich arbeite nur in der masterBranche. Der letzte Satz dieser Fehlermeldung unten lässt mich fragen: Wie finde ich heraus, welches die "standardmäßig konfigurierte Fernbedienung für Ihren aktuellen Zweig" ist ? Und wie stelle ich es ein?

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
leonbloy
quelle

Antworten:

230

Verfolgen Sie den Remote-Zweig

Sie können das Standard-Remote-Repository zum Drücken und Ziehen mithilfe der Track-Option von git-branch angeben. Normalerweise tun Sie dies, indem Sie beim Erstellen Ihres lokalen Hauptzweigs die Option --track angeben. Da diese jedoch bereits vorhanden ist, aktualisieren wir die Konfiguration einfach manuell wie folgt:

Bearbeiten Sie Ihre .git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

Jetzt können Sie einfach git push und git pull.

[ Quelle ]

scragz
quelle
Wäre dies nicht auch festgelegt, wenn das OP dies tun würde git pull hub master?
Ryan Bigg
@ Ryan Bigg: Nicht automatisch, sonst würden Sie Ihre Konfiguration immer vermasseln.
Poke
36
Warum eine Konfigurationsdatei bearbeiten, wenn aus genau diesem Grund Git-Befehle vorhanden sind?
Urschrei
43
git branch --set-upstream local_branch remote / remote_branch (oder beim Pushing, wie unten beschrieben)
urschrei
25
@scragz: Auf keinen Fall! Der Befehlsansatz garantiert, dass Ihre .gitconfig in einem aussagekräftigen Zustand bleibt.
smci
260

Sie können es einfacher machen und garantieren, dass Ihre .gitconfig Zustand in einem sinnvollen Zustand bleibt:

Verwenden der Git-Version v1.8.0 und höher

git push -u hub master beim Schieben oder:
git branch -u hub/master

ODER

(Dadurch wird die Fernbedienung für die aktuell ausgecheckten Zweig auf eingestellt. hub/master)
git branch --set-upstream-to hub/master

ODER

(Dadurch wird die Fernbedienung für den genannten Zweig festgelegt branch_name nach hub/master)
git branch branch_name --set-upstream-to hub/master

Wenn Sie v1.7.xoder früher verwenden

Sie müssen verwenden --set-upstream:
git branch --set-upstream master hub/master

urschrei
quelle
3
Für alle, die sich fragen: Der zweite Befehl kann für bestehende Zweige verwendet werden
Eric Hu
1
@ Eric-Hu, wie in meiner Antwort hier beschrieben: stackoverflow.com/questions/4878249/…
urschrei
1
Der set-upstream[-to]Befehl ändert die aktuell konfigurierte Fernbedienung. Das Originalposter fragte nach der standardmäßig konfigurierten Fernbedienung. Sicher ist das nicht ganz das gleiche Konzept?
Steve Pitchers
1
Jeder Zweig verfügt über eine aktuell konfigurierte Fernbedienung, die angibt, welcher Zweig auf dieser Fernbedienung dem lokalen Zweig entspricht. Die standardmäßig konfigurierte Fernbedienung bestimmt, welcher Zweig verschoben oder gezogen wird, wenn Sie keinen explizit angeben. Diese Antwort legt nur die aktuelle fest . Mit der akzeptierten Antwort (Bearbeitung von Hand) können Sie auch die Standardantwort festlegen . Kennt jemand einen Befehl, der es vermeidet, von Hand bearbeitet zu werden?
Steve Pitchers
1
--set-upstream-tonahm genau die gleichen Änderungen vor, .git/configdie @scragz in seiner Antwort vorgeschlagen hatte .
Strah
-1

Der Befehl zum Abrufen der effektiven Push-Fernbedienung für den Zweig, z. B. Master, lautet:

git config branch.master.pushRemote || git config remote.pushDefault || git config branch.master.remote

Hier ist der Grund (aus der Ausgabe "man git config"):

branch.name.remote [...] teilt git fetch und git push mit, welche Fernbedienung von / push nach [...] [for push] abgerufen werden soll, und kann mit remote.pushDefault (für alle Zweige) [und] für die Der aktuelle Zweig [..] wird weiter von branch.name.pushRemote überschrieben [...]

Aus irgendeinem Grund gibt "man git push" nur über branch.name.remote an (obwohl es die niedrigste Priorität der drei hat) + gibt fälschlicherweise an, dass wenn es nicht gesetzt ist, die Standardeinstellungen von push auf origin gesetzt werden - dies ist nicht der Fall Wenn Sie ein Repo klonen, wird branch.name.remote auf origin gesetzt. Wenn Sie diese Einstellung jedoch entfernen, schlägt git push fehl, obwohl Sie immer noch die Ursprungsfernbedienung haben

darkdiatel
quelle
Diese Frage wurde bereits mit einer nützlicheren Antwort beantwortet.
Austin Schäfer