Est-il une meilleure façon de savoir si une branche git existe?
Je suis en utilisant la commande suivante pour savoir si un local git branch avec branch-name
existe dans mon référentiel. Est-ce correct? Est-il un meilleur moyen?
Veuillez noter que je suis en train de faire cela à l'intérieur d'un script. Pour cette raison, j'aimerais l'utilisation de plomberie commandes si possible.
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
- Votre commande ressemble à celui que j'avais utilisé.
- Dans mon ignorance, je serais allé avec
git branch | grep -w <branch-name>
. Ok, c'est une porcelaine de commande, mais je ne peux pas imaginer une telle utilisation à évoluer considérablement dans l'avenir pour faire de cet extrait inutilisable... - Vous avez probablement raison, que la commande ne serait pas modifier de manière significative afin de le rendre inutilisable. J'ai un peu d'un trouble obsessionnel-compulsif au sujet de telles choses comme la porcelaine rapport à la plomberie, c'est tout.
git rev-parse --verify <branch_name>
vérifie également d'autres références telles que des balises et de commettre des hachages, si bien qu'il pourrait être plus approprié pour ce que vous avez besoin, il sera de retour de faux positifs si vous êtes uniquement intéressé précisément dans les branches.- Chose très mineure, mais dans le mise à Jour de la section, il convient de
git rev-parse --verify <branch-name>
(c'est à direbranch-name
au lieu debranch_name
)? - Seul le git show-ref travaille pour déterminer si une section LOCALE est présente. Dans la mise à jour (syntaxe avec git rev-parse), le code de retour est également 0 si une branche distante matchs.
Vous devez vous connecter pour publier un commentaire.
Pour autant que je sais, c'est la meilleure façon de le faire dans un script. Je ne suis pas sûr qu'il ya beaucoup plus à ajouter à cela, mais il pourrait aussi bien être une réponse qui dit simplement: "Que la commande est tout ce que vous voulez" 🙂
La seule chose que vous voudrez peut-être prudent, c'est que les noms de branche peut avoir d'étonnants personnages en eux, de sorte que vous pouvez citer
<branch-name>
.<branch-name>
. FWIW, je suis en utilisant ce dans un tissu de script. Je n'oublierai pas de citer la variable.Quand je fais une recherche pour 'git vérifier si la branche existe" sur un moteur de recherche, cette page est la première que je vois.
J'obtiens ce que je veux, mais j'aimerais fournir une mise à jour de réponse depuis le post original est à partir de 2011.
C'est essentiellement le même que l'on a accepté la réponse, mais vous n'avez pas besoin de taper "refs/heads/"
git rev-parse --verify
ne vous raconte pas si un tel objet existe dans le repo (c'est à dire il va retourner 0 pour toute valeur de<branch_name>
qui se traduit par un objet de n'importe quel type dans les pensions de titres). Elle ne vous dit pas si cet objet est une branche ou pas.Presque là.
Il suffit de laisser le
--verify
et--quiet
et vous obtenez soit la valeur de hachage si la branche existe ou rien si elle n'est pas.L'affecter à une variable et à la vérification d'une chaîne vide.
Je pense que vous pouvez utiliser
git show-branch
ici.Donc, $? == 0 indique que la branche existe et que vous n'avez pas à plonger dans la plomberie de refs/heads/à tous. Tant que vous ne passez pas
-r
montrer la branche, il ne fonctionne que sur des branches locales.git show-branch
est un en porcelaine la commande. Comme je l'ai dit dans ma question, je préfère ne pas utiliser de la porcelaine des commandes dans un script si plomberie équivalents sont disponibles. Voir kernel.org/pub/software/scm/git/docsgit show-branch refs/heads/[branch]
ougit show-branch refs/remotes/origin/[branch]
.Je recommande
git show-ref --quiet refs/heads/$name
.--quiet
signifie qu'il n'ya pas de sortie, ce qui est bon, car vous pouvez proprement vérifier l'état de sortie.refs/heads/$name
limites aux antennes locales des matchs et des noms complets (sinondev
correspondent àdevelop
)Utilisation dans un script:
Pour une utilisation dans un script:
Cette sortie
0
si et seulement si<branch-name>
existe comme une branche locale.Exemple:
Sur windows script batch c'est un peu différent,
Appelons
git is_localbranch
(vous devez ajouter un alias dans.gitconfig
).Utilisation:
Source:
Le résultat de l'examen sur ma Proposé de Modifier "à la" mise à Jour "sur la question initiale était" Il doit avoir été écrit comme un commentaire ou une réponse", donc je poste ici:
La une autre façon proposées seront non seulement vérifier les branches, mais toute référence avec un tel nom @jhuynh.
Problème avec une "mise à Jour" sur les premiers quiestion expliqué:
Permet de supposer et vérifiez que " maître.000' n'est qu'une étiquette, telle branche locale n'existe pas, grep renvoie une entrée wchich est un tag. Encore rev-parse sera de retour 0 si la référence existe, même si la branche locale n'existe pas. C'est un faux match, exactement comme l'a mentionné @paul-s
et oui il y en a un.
git rev-parse [] ...
https://git-scm.com/docs/git-rev-parse
Où u peut trouver l'ensemble des arguments et de la fonction.
Ni
git show-ref
nigit rev-parse
travaille sur mon cas.J'ai fini avec ce
Vous pouvez le faire aussi avec un fichier de script
Si vous pouvez gérer à inclure grep.
grep
comme un caractère de remplacement.abc
correspondent si il y a une branche appeléeabcdef
.Pour une utilisation dans un script, je vous recommande la commande suivante:
Noter que
<repo_url>
peut-être juste un "." pour spécifier la locale repo si vous êtes à l'intérieur de sa structure de répertoire, le chemin d'accès à un local de pensions, ou l'adresse d'une distance repo.La commande retourne 0 si la
<branch_name>
n'est pas présent de 1 si elle est présente.$ git branch --list $branch_name | grep $branch_name
ensuite, vérifier la valeur de retour est 0 ou 1.