J'utilise la commande suivante pour savoir si une branche git localebranch-name
existe dans mon référentiel. Est-ce correct? Y a-t-il un meilleur moyen?
Veuillez noter que je fais cela dans un script. Pour cette raison, j'aimerais utiliser des commandes de plomberie si possible.
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
git
git-branch
git-commands
Manoj Govindan
la source
la source
git branch | grep -w <branch-name>
. Ok, c'est une commande porcelaine, mais je ne peux pas imaginer que cet usage particulier soit changé de manière significative à l'avenir pour rendre cet extrait inutilisable ...git rev-parse --verify <branch_name>
vérifie également d'autres références telles que les balises et les hachages de validation, donc bien qu'il puisse être plus adapté à ce dont vous avez besoin, il renverra de faux positifs si vous n'êtes intéressé que précisément par les branches.Réponses:
Pour autant que je sache, c'est la meilleure façon de le faire dans un script. Je ne suis pas sûr qu'il y ait beaucoup plus à ajouter à cela, mais il pourrait aussi bien y avoir une réponse qui dit simplement "Cette commande fait tout ce que vous voulez" :)
La seule chose à laquelle vous voudrez peut-être faire attention est que les noms de branche peuvent contenir des caractères surprenants, vous voudrez peut-être les citer
<branch-name>
.la source
<branch-name>
. FWIW J'utilise ceci dans un script de fabric. Je me souviendrai de citer la variable.Lorsque je recherche «git check if branch exists» 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 réponse mise à jour puisque le message original date de 2011.
C'est essentiellement la même chose que la réponse acceptée, mais vous n'avez pas besoin de taper "refs / heads /"
la source
git rev-parse --verify
vous indique seulement si un tel objet existe dans le dépôt (c'est-à-dire qu'il retournera 0 pour toute valeur de<branch_name>
cela se traduit par un objet de n'importe quel type dans le dépôt). Il ne vous dit pas si cet objet est une branche ou non.Presque là.
Laissez simplement
--verify
et--quiet
et vous obtenez le hachage si la branche existe ou rien si ce n'est pas le cas.Attribuez-le à une variable et recherchez une chaîne vide.
la source
Je pense que vous pouvez utiliser
git show-branch
ici.Alors, $? == 0 indiquerait que la branche existe et que vous n'avez pas à creuser du tout dans la plomberie des refs / heads /. Tant que vous ne passez pas
-r
à show-branch, il ne fonctionnera que sur les branches locales.la source
git show-branch
est une commande en porcelaine . Comme je l'ai dit dans ma question, je préfère ne pas utiliser de commandes porcelaine dans un script si des équivalents de plomberie 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'y a pas de sortie, ce qui est bien car vous pouvez alors vérifier proprement l'état de sortie.refs/heads/$name
limites aux branches locales et correspond aux noms complets (sinondev
correspondraitdevelop
)Utilisation dans un script:
la source
À utiliser dans un script:
Cela se fermera
0
si et seulement si<branch-name>
existe en tant que branche locale.Exemple:
la source
Sur le script batch Windows, c'est un peu différent,
la source
Appelons-le
git is_localbranch
(vous devez ajouter un alias.gitconfig
).Usage:
La source:
la source
Le résultat de l'examen de ma `` modification suggérée '' à la `` mise à jour '' de la question initiale était `` cela aurait dû être écrit sous forme de commentaire ou de réponse '', je le poste donc ici:
L' autre moyen proposé vérifiera non seulement les branches mais toute référence avec un tel nom @jhuynh .
Problème avec une `` mise à jour '' sur la question initiale expliqué:
Supposons et vérifions que «master.000» n'est qu'une balise, une telle branche locale n'existe pas, grep renvoie une entrée qui est une balise. Toujours rev-parse retournera 0 si la référence existe, même si une telle branche locale n'existe pas. Ceci est une fausse correspondance, exactement comme mentionné par @ paul-s
la source
la source
Ouais, il y en a un.
Voir https://git-scm.com/docs/git-rev-parse où vous pouvez trouver l'ensemble des arguments et la fonction.
la source
Ni
git show-ref
nigit rev-parse
fonctionne sur mon cas.$ git --version git version 2.21.0 $ git show-branch --list * [master] mybranch commit $ BRANCH_NAME=mybranch $ git rev-parse --verify $BRANCH_NAME fatal: Needed a single revision $ git show-ref refs/heads/$BRANCH_NAME <no otput> $ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists" mybranch not exists
J'ai fini avec ça
$ BRANCH_NAME=mybranch $ SHOW_ALL=`git show-branch --all | grep -w $BRANCH_NAME` $ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists" mybranch exists
Vous pouvez aussi le faire avec un fichier script
#!/bin/sh BRANCH_NAME=mybranch if grep -Fqe $BRANCH_NAME << EOF `git show-branch --all` EOF then echo "$BRANCH_NAME exists" else echo "$BRANCH_NAME not exists" fi
la source
Si vous parvenez à inclure grep.
la source
grep
comme un métacaractère.abc
, correspondra s'il y a une branche appeléeabcdef
.Pour une utilisation dans un script, je recommande la commande suivante:
Notez qu'il
<repo_url>
ne peut s'agir que d'un "." pour spécifier le dépôt local si vous vous trouvez dans sa structure de répertoires, le chemin vers un dépôt local ou l'adresse d'un dépôt distant.La commande renvoie un 0 si le
<branch_name>
n'est pas présent de 1 s'il est présent.la source
puis vérifiez que la valeur de retour est 0 ou 1.
la source