2010-02-25 6 views
21

Je trouve les docs git très énigmatiques à propos de ce problème. Je veux faire une chose simple, mais il semble que ce ne soit pas simple du tout.Comment dire à Git de toujours tirer la branche principale?

je la situation suivante:

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

je peux utiliser git tirer chercher et de fusionner d'origine, et qui fonctionne très bien:

$ git pull 
Already up-to-date. 

je peux tirer de bâton comme ceci:

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

Cependant, quand je tire de bâton sans maître partie , je reçois ce message:

$ 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. 

Certaines choses me confondent ici. Que signifie "votre fichier de configuration" ici? Quel fichier dois-je modifier et que dois-je taper exactement? Qu'est-ce que surnom dans ce cas?

Je m'attendrais à ce que ce que j'essaie d'accomplir est très commun, mais je n'ai pas été capable de trouver une réponse directe à un exemple.

Répondre

26

Que signifie "votre fichier de configuration" ici?

Le fichier de configuration de votre repo, trouvé à .git/config à la racine de votre repo. (Il y a aussi un par utilisateur fichier de configuration globale à ~/.gitconfig, mais vous ne voulez pas mettre des paramètres spécifiques à pension là-bas.)

Quel fichier dois-je modifier, et que dois-je saisir exactement?

Vous pouvez utiliser le programme git config pour écrire des informations de configuration au lieu de les entrer manuellement. Toutefois, si vous voulez le faire manuellement, il suffit d'ouvrir .git/config - la syntaxe est assez simple.

Quel est le surnom dans ce cas?

Surnom, dans ce cas, est le nom de la télécommande - donc "stick". Vous n'avez pas à vous soucier des options remote.*, car celles-ci ont déjà été configurées, mais vous devez définir les options branch.*. Ces options indiquent à Git ce qu'il faut fusionner en faisant un git pull à partir du bâton.

Dites que vous voulez fusionner en maître à partir du bâton lorsque vous faites un git pull à partir du bâton. Vous pouvez le faire comme ceci:

# 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 

Alors maintenant, quand vous faites une git pull sans information à distance ou refspec, il va chercher toutes les branches de bâton et de fusion dans la branche principale de bâton.Notez que l'origine sera et non être la télécommande par défaut plus; Pour fusionner dans la branche principale d'origine, vous devez utiliser git pull origin master. Si vous ne souhaitez pas changer la télécommande par défaut, vous devrez continuer à utiliser git pull stick master.

+1

Votre dernière phrase est cruciale. J'espérais qu'il y avait un moyen de contourner ce problème. –

+0

Je ne sais pas d'un côté - 'branche. .remote' et 'branch. .merge' fonctionnent main dans la main, et chaque branche ne peut avoir qu'une seule liste 'remote'. – mipadi

+0

Eh bien, je suppose que c'est exactement comme ça que Git fonctionne. Peut-être que je soumettrai une demande de fonctionnalité aux développeurs si cela m'agace trop (ce qui n'est pas très probable). Réponse acceptée. –