Vous m’avez demandé de tirer sans me dire avec quelle twig vous souhaitez fusionner

TL; DR: J’ai une twig “suivie” que je ne peux pas tirer.

Donc je suis dans “bucket-4”:

$ git branch -v bucket-1 410f7b5 * gh-53 * gh-48 * "Share App" bucket-2 7ed70a2 * upgrade to SOLR 3.3.0 bucket-3 400ffe4 * emergency fix prod issue * bucket-4 64c2414 Merge branch 'bucket-3' into bucket-4 master 8dc4854 [ahead 1] * gh-73 

Je voudrais apporter des modifications à partir de ma télécommande:

 $ git pull You asked me to pull without telling me which branch you want to merge with, and 'branch.bucket-4.merge' in your configuration file does not tell me, either. Please specify which branch you want to use on the command line and try again (eg 'git pull  '). See git-pull(1) for details. If you often merge with the same branch, you may want to use something like the following in your configuration file: [branch "bucket-4"] remote =  merge =  [remote ""] url =  fetch =  See git-config(1) for details. 

Hmm, bizarre, je pensais avoir déjà ajouté “bucket-4” comme twig de suivi. Voyons voir:

 $ git remote show origin * remote origin Fetch URL: [email protected]:abcd/main.git Push URL: [email protected]:abcd/main.git HEAD branch (remote HEAD is ambiguous, may be one of the following): bucket-3 master Remote twigs: bucket-1 tracked bucket-2 tracked bucket-3 tracked bucket-4 tracked master tracked Local twigs configured for 'git pull': bucket-1 merges with remote bucket-1 bucket-2 merges with remote bucket-2 bucket-3 merges with remote bucket-3 master merges with remote master Local refs configured for 'git push': bucket-1 pushes to bucket-1 (up to date) bucket-2 pushes to bucket-2 (up to date) bucket-3 pushes to bucket-3 (up to date) bucket-4 pushes to bucket-4 (local out of date) master pushes to master (fast-forwardable) 

En effet, bucket-4 est marqué comme “suivi”, mais il est en quelque sorte configuré pour pousser, mais pas pour tirer.

En regardant mon fichier .git/config , je constate que j’ai des entrées “remote” et “merge” pour la plupart de mes twigs, mais pas pour bucket-4. Comment est-il même considéré comme “suivi” sans cela?

 [remote "origin"] url = [email protected]:abcd/main.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [branch "rel-2011-07-07"] remote = origin merge = refs/heads/rel-2011-07-07 [branch "bucket-1"] remote = origin merge = refs/heads/bucket-1 [branch "bucket-2"] remote = origin merge = refs/heads/bucket-2 [branch] autosetupmerge = true [branch "bucket-3"] remote = origin merge = refs/heads/bucket-3 

Je vois que la solution probable ici est d’append remote/merge entrées remote/merge pour bucket-4 dans mon fichier de configuration. Mais comment est-il considéré comme “suivi” sans cela? bucket-4 a été créé localement, puis transféré au serveur à partir de ce repository. Je pense donc que je n’ai pas configuré correctement le suivi pour cette twig.

Y a-t-il une configuration que je peux append pour que toutes les twigs locales suivent correctement leurs télécommandes à l’avenir?

Il dit que bucket-4 pushes to bucket-4 simplement parce que la valeur par défaut lorsque l’on appuie sur une twig est de la pousser sur une autre avec un nom correspondant sur la télécommande. (Notez que ceci est toujours la valeur par défaut, même si la twig locale suit une twig de suivi à distance et que la twig de suivi à distance correspond à une twig avec un nom différent dans le référentiel distant.)

La manière la plus simple de définir l’association entre votre bucket-4 et votre bucket-4 est de vous assurer que, la prochaine fois que vous appuyez, vous faites:

 git push -u origin bucket-4 

Alternativement, vous pouvez faire:

 git branch --set-upstream bucket-4 origin/bucket-4 

Pour répondre directement à quelques questions:

Comment est-il même considéré comme “suivi” sans cela?

Dans ce cas, ce n’est pas le cas – il ne suit pas la twig de suivi à distance s’il n’y a pas de branch.bucket-4.merge ou de branch.bucket-4.remote dans votre git config. La sortie de git remote show origin vous indique simplement où la twig sera poussée par défaut.

Y a-t-il une configuration que je peux append pour que toutes les twigs locales suivent correctement leurs télécommandes à l’avenir?

Je ne pense pas qu’il y en a. Lorsque vous avez créé localement bucket-4 , comme je suppose, la twig de suivi à distance n’existait pas, elle ne peut donc pas être configurée à ce stade – ce serait un comportement par défaut très déroutant. Il vous suffit de vous rappeler d’append -u à votre première commande git push de cette twig dans son référentiel en amont.

J’espère que c’est de l’aide.

git branch --set-upstream origin/ est devenu obsolète au moins à partir de la version 1.8.2.3 (ma version).

Utilisez plutôt git branch --set-upstream-to=origin/ .