2010-02-25 4 views
21

Ich finde git docs sehr kryptisch in Bezug auf dieses Problem. Ich möchte eine einfache Sache tun, aber es scheint, es ist gar nicht so einfach.Wie kann ich Git sagen, immer den Master-Zweig zu ziehen?

Ich habe folgende Situation:

$ git remote -v 
origin git://192.168.0.49/mnt/repos 
stick /mnt/titanium/podaci/repos 

kann ich git ziehen vom Ursprung zu holen und verschmelzen, und das funktioniert gut:

$ git pull 
Already up-to-date. 

ich von Stick ziehen kann wie folgt:

$ git pull stick master 
Already up-to-date. 

Allerdings, wenn ich von Stick ohne Master Teil ziehen, bekomme ich diese Meldung:

$ git pull stick 
From /mnt/titanium/podaci/repos 
* [new branch]  su2009 -> stick/su2009 
You asked me to pull without telling me which branch you 
want to merge with, and 'branch.master.merge' in 
your configuration file does not tell me either. Please 
name which branch you want to merge on the command line and 
try again (e.g. 'git pull <repository> <refspec>'). 
See git-pull(1) for details on the refspec. 

If you often merge with the same branch, you may want to 
configure the following variables in your configuration 
file: 

    branch.master.remote = <nickname> 
    branch.master.merge = <remote-ref> 
    remote.<nickname>.url = <url> 
    remote.<nickname>.fetch = <refspec> 

See git-config(1) for details. 

Einige Dinge verwirren mich hier. Was bedeutet "Ihre Konfigurationsdatei" hier? Welche Datei soll ich bearbeiten und was genau soll ich eingeben? Was ist Spitzname in diesem Fall?

Ich würde erwarten, dass das, was ich zu erreichen versuche, sehr häufig ist, aber ich konnte nicht eine direkte Antwort mit einem Beispiel finden.

Antwort

26

Was bedeutet "Ihre Konfigurationsdatei" hier?

Die Repo-Konfigurationsdatei finden Sie unter .git/config im Stammverzeichnis Ihres Repos. (Es gibt auch eine Pro-Benutzer globale Konfigurationsdatei auf ~/.gitconfig, aber Sie wollen nicht, dass es Repo-spezifische Einstellungen setzen.)

Welche Datei muss ich bearbeiten, und was genau soll ich geben?

Sie können das Programm git config verwenden, um Konfigurationsinformationen zu schreiben, anstatt es manuell einzugeben. Wenn Sie es jedoch manuell tun möchten, öffnen Sie einfach .git/config - die Syntax ist ziemlich einfach.

Was ist in diesem Fall Spitzname?

Spitzname, in diesem Fall ist der Name der Fernbedienung - also "Stick". Sie müssen sich keine Gedanken über die remote.* Optionen machen, da diese bereits eingerichtet wurden, aber Sie müssen die Optionen branch.* einstellen. Diese Optionen sagen Git, was zusammengeführt werden soll, wenn ein git pull Stick ausgeführt wird.

Angenommen, Sie möchten Master von Stick zusammenführen, wenn Sie eine git pull von Stick machen. Sie können wie folgt vorgehen:

# Sets stick as default remote for git pull. 
# Note that origin will no longer be the default remote for git pull! 
$ git config branch.master.remote stick 

# Automatically merge in stick's master branch when doing a git pull 
$ git config branch.master.merge refs/heads/master 

So, jetzt, wenn Sie eine git pull ohne Fernbedienung oder Refspec info tun, werden sie alle Zweige von Stick holen, und in Stick Master-Zweig zusammenführen.Beachten Sie, dass der Ursprung nicht der Standard-Remote mehr sein wird; Um in den Master-Zweig des Ursprungs zu migrieren, müssen Sie git pull origin master verwenden.

Wenn Sie nicht möchten, dass die Standardfernbedienung auf "stick" gesetzt wird, müssen Sie weiterhin git pull stick master verwenden.

+1

Ihr letzter Satz ist entscheidend. Ich hatte gehofft, dass es eine Möglichkeit gibt, dieses Problem zu umgehen. –

+0

Ich weiß nicht von einer Hand - 'Zweig. .remote' und 'branch. .merge' Arbeit Hand-in-Hand, und jeder Zweig kann nur eine "Remote" -Liste haben. – mipadi

+0

Nun, ich denke, es ist einfach so, wie Git funktioniert. Vielleicht werde ich den Entwicklern eine Feature-Anfrage senden, wenn es mir zu sehr auf die Nerven geht (was nicht sehr wahrscheinlich ist). Antwort angenommen. –

Verwandte Themen