Le suivi d'une seule branche distante en tant que branche locale est assez simple.
$ git checkout --track -b ${branch_name} origin/${branch_name}
Pousser toutes les branches locales vers la télécommande, créer de nouvelles branches distantes selon les besoins est également facile.
$ git push --all origin
Je veux faire l'inverse. Si j'ai un nombre X de succursales distantes à une seule source:
$ git branch -r
branch1
branch2
branch3
.
.
.
Puis-je créer des branches de suivi locales pour toutes ces branches distantes sans avoir à les créer manuellement? Dites quelque chose comme:
$ git checkout --track -b --all origin
J'ai googlé et des RTM, mais je suis venu jusqu'à présent.
git checkout --track origin/branchname
git pull origin
et appuyez surtab
, pour obtenir une liste des branches distantes. Puis continuez à taper et appuyez surreturn
.Réponses:
Utilisation de bash:
après git 1.9.1 avant git 1.9.1Mettez à jour les succursales, en supposant qu'il n'y a pas de changements sur vos succursales de suivi locales:
Ignorez les avertissements ambigus de refname, git semble préférer la branche locale comme il se doit.
la source
git pull
dispose d'un--all
commutateur, qui récupérera + fusionnera toutes les branches suivies.La réponse d'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:
Il a également l'avantage de ne vous donner aucun avertissement sur les références ambiguës.
la source
grep -v master
, qu'en est-ilgrep -v /HEAD
? Cela semble filtrer la branche par défaut, sans nécessiter de personnalisationLa plupart des réponses ici compliquent trop l'analyse de la sortie de
git branch -r
. Vous pouvez utiliser lafor
boucle suivante pour créer les branches de suivi contre toutes les branches de la télécommande comme ceci.Exemple
Disons que j'ai ces succursales éloignées.
Confirmez que nous ne suivons déjà rien d'autre que le maître, localement:
Vous pouvez utiliser cette seule ligne pour créer les branches de suivi:
Maintenant confirmez:
Pour les supprimer:
Si vous utilisez le
-vv
commutateur pour,git branch
vous pouvez confirmer:Répartition de la boucle for
La boucle appelle essentiellement la commande
git branch -r
, filtrant toutes les branches HEAD ou master dans la sortie en utilisantgrep -vE "HEAD|master"
. Pour obtenir les noms des seules branches moins laorigin/
sous - chaîne, nous utilisons la manipulation de chaîne de Bash${var#stringtoremove}
. Cela supprimera la chaîne "stringtoremove" de la variable$var
. Dans notre cas, nous supprimons la chaîneorigin/
de la variable$i
.REMARQUE: vous pouvez également utiliser
git checkout --track ...
pour faire ceci:Mais je ne me soucie pas particulièrement de cette méthode, car elle vous permet de basculer entre les branches lors de la vérification. Une fois terminé, il vous laissera sur la dernière branche créée.
Références
la source
Mise à jour Q1 2020: Mohsen Abasi propose dans les commentaires , sur la base des 2014 slm de réponse , l'alternative plus simple:
Et il utilise à la
$()
place des backticks obsolètes .Comme je l'ai mentionné dans une autre vieille réponse , l'utilisation
git for-each-ref
est probablement plus rapide .Et j'utiliser la nouvelle (Git 2.23+)
git switch
commande , qui remplace la confusiongit checkout
.De cette façon, pas
grep
nécessaire.Ancienne réponse originale (2011):
Voici mon one-liner que j'utilise (dans un shell bash, testé avec msysgit1.7.4):
Pour copier-coller:
Pour plus de lisibilité:
remote
variable (cela peut être 'origin
' ou le nom que vous avez défini pour l'une des télécommandes de votre dépôt Git actuel).origin/a/Branch/Name => a/Branch/Name
via l'awk
expression.il définira la branche amont via
--set-upstream-to
(ou-u
) , non--track
:l'avantage est que, si la branche existe déjà, elle n'échouera pas et ne changera pas l'origine de la branche, elle ne configurera que le
branch.xxx.(remote|merge)
paramètre.Cette commande créera des branches locales pour toutes les branches en amont distantes et définira leur paramètre distant et de fusion sur cette branche distante.
la source
--set-upstream-to
plutôt--track
que si.git switch
place degit checkout
. Mais votre (très bonne) idée demeure.Vous pourriez écrire cela assez facilement, mais je ne sais pas quand cela serait utile. Ces succursales prendraient assez rapidement du retard et vous deviez les mettre à jour tout le temps.
Les branches distantes seront automatiquement mises à jour, il est donc plus simple de créer simplement la branche locale à l'endroit où vous voulez réellement travailler dessus.
la source
git up
met à jour toutes les succursales locales.la source
| grep -v HEAD
au pipeline pour qu'il fonctionne correctement.sans aucun script (dans un répertoire vide):
après cela, toutes les succursales distantes seront considérées comme locales.
original (en russe) .
la source
Si vous souhaitez utiliser PowerShell et que votre télécommande s'appelle origin. Ensuite, cela fonctionne.
la source
git svn clone'd
repo:git branch -r | %{$_ -replace " origin/"} | %{git checkout -b $_ "origin/$_"}
git branch -r | %{$_ -replace " origin/"} | %{git branch -u "origin/$_" $_}
Utilisez ceci et vous n'aurez pas d'avertissement tel que: refname 'origin / dev' est ambigu
la source
Voici ma solution de la commande BASH faisant référence par @tjmcewan:
Mon objectif est de résoudre le problème que toutes les branches créées auront "origin /" comme début du nom, car j'ai testé que $ variables distantes incluent toujours "origin /":
la source
Pour faire la même chose que la réponse de tjmcewan mais sous Windows, appelez ceci à partir d'un fichier batch :
Ou ceci depuis la ligne de commande :
la source
À partir de git 2.23:
L'
-C
indicateur degit switch
création ou de réinitialisation s'il existe déjà.documentation du commutateur git
la source
Dans le cas où vous avez déjà vérifié certaines branches et que vous souhaitez
vous pouvez utiliser le script compatible bash et zsh suivant:
la source
Explication:
ligne 1: 'git branch -r' (suivi de 'git remote update' pour mettre à jour les informations sur les modifications apportées à remote) répertorie toutes les branches distantes; «egrep -vw» est utilisé pour frapper les entrées ayant HEAD et master dans le résultat.
ligne 3: suivez la branche distante nommée tout en la récupérant localement. Un simple awk est utilisé pour éviter que «origin /» ne soit le suffixe des branches locales.
la source
En utilisant bash, si vous souhaitez vérifier toutes les branches:
Il est important de noter que lorsque vous effectuez une extraction qui fait tomber de nouvelles branches de suivi à distance, vous n'en avez pas automatiquement de copies locales modifiables.
la source