Wie kann derselbe Zweig standardmäßig gezogen werden?

4920
Xiè Jìléi

Wenn ich von den neu hinzugefügten Fernbedienungen abziehe, muss ich den Zweignamen explizit angeben:

$ git pull remote1 ...  Error: you didn't specify a branch name.  $ git pull remote1 master 

Obwohl ich in der masterBranche arbeite .

Es ist vielleicht nützlich, von einem anderen Zweig aus verschiedenen Fernbedienungen abzurufen, aber es ist mir nie passiert. In unserem Team ziehen wir niemals einen Zweig mit einem anderen Namen in den aktuell ausgecheckten Zweig.

Kann ich also git so konfigurieren, dass es immer aus dem Zweig mit demselben Namen zieht?

5

1 Antwort auf die Frage

7
Chris Johnsen

Wenn Sie die "Upstream-Konfiguration" Ihrer lokalen Niederlassung nicht zurücksetzen möchten, können Sie Folgendes verwenden:

git pull remote1 "$(git rev-parse --symbolic-full-name HEAD)" 

Es wird wahrscheinlich unerwartete Dinge tun, wenn Ihr lokaler HEAD getrennt wird.

Sie könnten es als Git-Alias ​​packen, um die Eingabe zu vereinfachen (obwohl Sie den Alias ​​trotzdem an alle Benutzer verteilen müssten):

git config --global alias.pullcb \ '!sh -c '\''git pull "$1" "$(git rev-parse --symbolic-full-name HEAD)"'\'' -' 

Verwenden Sie den Alias ​​wie folgt:

git pullcb remote1 

Ich würde vermuten, dass diese Art von Verzweigungsbeziehung (die leicht von einer gleichnamigen Verzweigung auf eine von mehreren Fernbedienungen gezogen werden muss) nicht einfach konfiguriert werden kann, da sie selten nützlich ist, wenn die meisten Aufgaben in Zweigniederlassungen erledigt werden .


Wenn die "neue Fernbedienung" hingegen die neue primäre Upstream-Quelle für Ihren lokalen Zweig ist, sollten Sie die Aktualisierung der "Upstream-Konfiguration" Ihres lokalen Zweigs in Betracht ziehen, sodass Sie sie einfach verwenden können git pull(ohne Angabe eines Remote-Namens.) ).

Sie können die Upstream-Konfiguration für einen Zweig in Git 1.7.0 und höher 1 mit überprüfen

git rev-parse --symbolic-full-name my-branch@ 

Sie können die Upstream-Konfiguration in Git 1.7.0 und höher 2 mit aktualisieren

git branch --set-upstream my-branch some-remote/their-branch 

Sobald Ihre Zweigstelle über die entsprechende Upstream-Konfiguration verfügt, können Sie sie einfach verwenden git pull, um von der "Upstream-Zweigstelle" der aktuellen Zweigstelle abzurufen.


Letztlich wird die Upstream-Konfiguration eines Zweigs von den Konfigurationsvariablen branch.<name>.remoteund gesteuert branch.<name>.merge(siehe git-config (1) ). Die --trackund --no-trackOptionen git branchund git checkoutkönnen verwendet werden, zu kontrollieren, ob diese Variablen gesetzt werden, wenn ein Zweig erstellt wird. Die branch.autoSetupMergeKonfigurationsvariable steuert das Standardverhalten (wenn weder angegeben --tracknoch --no-trackangegeben sind). In der Standardeinstellung wird die Upstream-Konfiguration für Zweige erstellt, die aus Fernverfolgungszweigen erstellt werden. Die folgenden Befehle erstellen also den neuen lokalen Zweig "my-branch" und konfigurieren ihn so, dass er den Zweig "their-branch" vom entfernten "some-remote" verfolgt:

git branch my-branch some-remote/their-branch git checkout -b my-branch some-remote/their-branch 

1 Für Git-Versionen vor 1.7.0 können Sie die Upstream-Konfiguration für „my-branch“ wie folgt überprüfen:

git config branch.my-branch remote && git config branch.my-branch.merge 

Beschreibungen der Werte finden Sie unter git-config (1) .

Sie können die .git/configDatei auch manuell überprüfen .

2 Für Git-Versionen vor 1.7.0 können Sie die Upstream-Konfiguration für „my-branch“ wie folgt ändern:

git config branch.my-branch.remote some-remote && git config branch.my-branch.merge refs/heads/their-branch 

Beschreibungen der Werte finden Sie unter git-config (1) .

Sie können die .git/configDatei auch manuell bearbeiten ( git config -ein Git 1.6.3 und höher).

+1 für `git config -e`, da ich das nicht wusste ... Ich hoffe, ich werde mir etwas Zeit nehmen, um den Rest der Antwort zu überprüfen;) Dan Rosenstark vor 13 Jahren 0