Comment configurer pour tirer la même branche par défaut?

5

Lorsque je tire des nouvelles télécommandes ajoutées, je dois spécifier explicitement le nom de la branche:

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

$ git pull remote1 master

Bien que je travaille sur la masterbranche.

Il peut être utile de tirer d'une branche différente de plusieurs télécommandes, mais cela ne m'est jamais arrivé. Dans notre équipe, nous n’avons jamais recours à une branche de nom différent de la branche actuellement extraite.

Alors, puis-je configurer git pour qu'il tire toujours de la branche portant le même nom?

Xiè Jìléi
la source

Réponses:

7

Si vous ne souhaitez pas réinitialiser la «configuration en amont» de votre branche locale, vous pouvez utiliser ceci:

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

Cela fera probablement des choses inattendues si votre HEAD local est détaché.

Vous pouvez le regrouper sous un alias Git pour le rendre plus facile à taper (bien que vous ayez toujours besoin de le distribuer à tous vos utilisateurs):

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

Utilisez l'alias comme ceci:

git pullcb remote1

Je suppose que ce type de relation de branche (nécessité d'extraire facilement la même branche nommée de plusieurs télécommandes) n'est pas facilement configurable car il est rarement utile lorsque la plupart des travaux sont effectués dans des branches de sujet .


Par ailleurs, si la «nouvelle télécommande» doit devenir la nouvelle source principale en amont de votre branche locale, envisagez de mettre à jour la «configuration en amont» de votre branche locale afin de pouvoir simplement l'utiliser git pull(sans spécifier de nom distant). ).

Vous pouvez vérifier la configuration en amont d’une branche dans Git 1.7.0 et versions ultérieures 1 avec

git rev-parse --symbolic-full-name my-branch@{upstream}

Vous pouvez mettre à jour la configuration en amont dans Git 1.7.0 et versions ultérieures 2 avec

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

Une fois que votre branche a la configuration en amont appropriée, vous pouvez simplement l'utiliser git pullpour extraire de la «branche en amont» de la branche actuelle.


En fin de compte, la configuration en amont d'une branche est contrôlée par les variables branch.<name>.remoteet de branch.<name>.mergeconfiguration (voir git-config (1) ). Les options --tracket --no-trackde git branchet git checkoutpeuvent être utilisées pour contrôler si ces variables sont définies lors de la création d'une branche. La branch.autoSetupMergevariable de configuration contrôle le comportement par défaut (quand ni --track, ni --no-tracksont données); Par défaut, il crée la configuration en amont pour les branches créées à partir de branches de suivi à distance. Ainsi, les commandes suivantes créent la nouvelle branche locale «my-branch» et la configurent pour suivre la branche «leur-branche» à partir de la télécommande «some-remote»:

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

1 Pour les versions de Git antérieures à la version 1.7.0, vous pouvez vérifier la configuration en amont de «my-branch» comme suit:

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

Voir git-config (1) pour une description des valeurs.

Vous pouvez également inspecter manuellement le .git/configfichier.

2 Pour les versions de Git antérieures à 1.7.0, vous pouvez modifier la configuration en amont de «my-branch» comme suit:

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

Voir git-config (1) pour une description des valeurs.

Vous pouvez également modifier manuellement le .git/configfichier ( git config -edans Git 1.6.3 et versions ultérieures).

Chris Johnsen
la source
+1 car git config -e, comme je ne le savais pas ... j'espère avoir le temps de vérifier le reste de la réponse;)
Dan Rosenstark le