Git liste des noms de branche de la télécommande spécifique
Comment obtenir tous les noms de quelques branches d'origine distante?
j'ai commencé à partir de --remote --list
options, mais est devenu redondant origin/HEAD -> origin/master
message et branches de l'autre origine.
$> git branch --remote --list
origin/HEAD -> origin/master
origin1/develop
origin1/feature/1
origin1/feature/2
origin1/feature/3
origin1/master
origin2/develop
origin2/feature/1
origin2/feature/2
origin2/master
Branches d'origine spécifique pourrait être apparié avec <pattern>
option, mais le message redondant est toujours là. En fait ce modèle n'est pas vraiment correct, parce que le nom d'une origine pourrait être un substrat d'une autre origine nom, ou même certains de la branche.
$> git branch --remote --list origin1*
origin1/HEAD -> origin/master
origin1/develop
origin1/feature/1
origin1/feature/2
origin1/feature/3
origin1/master
ce que je cherche est une liste de noms de branches de origin1
, n'importe lequel d'entre eux je pourrais utiliser pour la commande git checkout
. Quelque chose comme ça:
develop
feature/1
feature/2
feature/3
master
il est important que ce soit fait sans grep
, sed
, tail
ou même ghc -e
wrappers, seulement avec la vraie git
puissance, en raison de leur instabilité et la variation.
3 réponses
il est important que ce soit fait sans
grep
,sed
,tail
ou mêmeghc -e
wrappers, seulement avec une vraie puissance de gitan, en raison de leur instabilité et de leur variation.
qui est seulement vrai pour les commandes de porcelaine git (voir " que signifie le terme porcelaine dans Git? ")
utiliser la commande de plomberie ls-remote , et ensuite vous pourrez filtrer sa sortie.
ls-télécommande sans paramètre serait encore de la liste de la distance de la TÊTE:
git@vonc-VirtualBox:~/ce/ce6/.git$ git ls-remote origin
8598d26b4a4bbe416f46087815734d49ba428523 HEAD
8598d26b4a4bbe416f46087815734d49ba428523 refs/heads/master
38325f657380ddef07fa32063c44d7d6c601c012 refs/heads/test_trap
mais si vous demandez seulement les têtes de ladite télécommande:
git@vonc-VirtualBox:~/ce/ce6/.git$ git ls-remote --heads origin
8598d26b4a4bbe416f46087815734d49ba428523 refs/heads/master
38325f657380ddef07fa32063c44d7d6c601c012 refs/heads/test_trap
réponse finale:
git@vonc-VirtualBox:~/ce/ce6/.git$ git ls-remote --heads origin | sed 's?.*refs/heads/??'
master
test_trap
(Oui, il utilise sed
, mais la sortie d'une commande de plomberie est supposée être assez stable pour être analysée)
Une autre méthode, après quelques recherches sur le même problème, est:
git for-each-ref --format='%(refname:strip=2)' refs/remotes/<remote_name>
Cela donnera une liste triée de vos références locales pour la télécommande nommée au point que vous avez récupéré la dernière fois.
vous pouvez ajuster ceci pour leurs étiquettes, etc.
la réponse existante utilise à la fois quelque chose explicitement non voulu dans la question (sed) et est une commande à distance.
j'ai trouvé ceci qui évite à la fois ces deux problèmes, utilise seulement des commandes git locales et un tuyau:
git rev-parse --remotes=origin | git name-rev --name-only --stdin
Update : pas vraiment optimal non plus, mais le garder si quelqu'un sait comment l'améliorer. Il affiche la télécommande complète avec le préfixe /remotes / origin si vous n'avez pas de local branche, mais seulement le nom local si vous en avez. En outre, il semble sauter quelques références s'il ya plusieurs pointant vers le même SHA1.