213 votes

Suivre toutes les succursales distantes de git en tant que succursales locales

Le suivi d'une seule télécommande de la branche locale de la branche est assez simple.

$ git checkout --track -b ${branch_name} origin/${branch_name}

En poussant toutes les branches locales jusqu'à la distance, la création de nouvelles branches distantes comme nécessaire est également facile.

$ git push --all origin

Je veux faire l'inverse. Si j'ai un nombre X de branches distantes à une source unique:

$ git branch -r 
branch1
branch2
branch3
.
.
.

Puis-je créer des local de suivi des branches pour toutes ces branches distantes sans besoin de créer manuellement chacun? Dire quelque chose comme:

$ git checkout --track -b --all origin

J'ai googlé et la Smtr, mais ils ont été jusqu'superposés jusqu'à présent.

208voto

tjmcewan Points 1068

La réponse donnée par Otto est bonne, mais toutes les branches créées auront "origine /" comme début du nom. Si vous voulez juste que la dernière partie (après le dernier /) soit vos noms de branche résultants, utilisez ceci:

 for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
 

Il a également l'avantage de ne pas vous avertir des références ambiguës.

147voto

Otto Points 5166

En utilisant bash :

Mettre à jour les directions générales, en supposant qu’il n’y a aucun changement sur vos branches locales de suivi :

Ignorer les avertissements refname ambigu, git semble préférer la branche locale comme il se doit.

25voto

VonC Points 414372

Voici ma ligne de commande que j'utilise (dans un shell bash, testé avec msysgit1.7.4):

Pour copier-coller:

remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch --set-upstream-to $brname  $remote/$brname ; done

Pour plus de lisibilité:

remote=origin ; // put here the name of the remote you want
for brname in `
    git branch -r | grep $remote | grep -v master | grep -v HEAD 
    | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do 
    git branch --set-upstream-to $brname  $remote/$brname ; 
done
  • il ne sélectionner en amont les branches à partir de la télécommande que vous spécifiez dans l' remote variable (il peut être 'origin"ou tout autre nom que vous avez défini pour l'une des télécommandes de votre repo Git).
  • il va extraire le nom de l'agence: origin/a/Branch/Name => a/Branch/Name grâce à l' awk expression.
  • il sera défini en amont de la branche par le biais --set-upstream-to (ou -u), pas d' --track:
    L'avantage est que, si la branche existe déjà, il ne manque pas et qu'il ne changera pas sa branche d'origine, il suffira de configurer l' branch.xxx.(remote|merge) réglage.

    branch.aBranchName.remote=origin
    branch.aBranchName.merge=refs/heads/a/Branch/Name
    

Cette commande va créer des branches pour tous à distance en amont des branches, et l'ensemble de leur distance et de fusion de réglage à distance de la branche.

15voto

Dustin Points 35205

Vous pourriez le script assez facilement, mais je ne sais pas quand il serait précieux. Ces branches seraient traîne assez rapidement, et vous devez mettre à jour tout le temps.

Les branches éloignées vont automatiquement être mis à jour, donc il est plus facile juste créer la branche locale à l’endroit où vous voulez réellement travailler là-dessus.

3voto

bruzzo Points 92
<pre><code></code><p>L’utiliser et vous n’aurez pas cette mise en garde comme : refname « origine/dev » est ambigu</p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X