Estoy usando el siguiente comando para averiguar si existe una rama local de git branch-name
en mi repositorio. ¿Es esto correcto? ¿Hay una mejor manera?
Tenga en cuenta que estoy haciendo esto dentro de un script. Por esta razón, me gustaría usar comandos de plomería si es posible.
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
git
git-branch
git-commands
Manoj Govindan
fuente
fuente
git branch | grep -w <branch-name>
. Ok, es un comando de porcelana, pero no puedo imaginar que este uso particular que haber un cambio significativo en el futuro como para hacer este fragmento inservible ...git rev-parse --verify <branch_name>
también verifica otras referencias, como etiquetas y hashes de confirmación, por lo que, aunque podría ser más adecuado para lo que necesita, devolverá falsos positivos si solo le interesan precisamente las ramas.Respuestas:
Hasta donde yo sé, esa es la mejor manera de hacerlo en un script. No estoy seguro de que haya mucho más que agregar a eso, pero también podría haber una respuesta que diga "Ese comando hace todo lo que quieras" :)
Lo único de lo que debe tener cuidado es que los nombres de las ramas pueden tener caracteres sorprendentes, por lo que es posible que desee citar
<branch-name>
.fuente
<branch-name>
. FWIW Estoy usando esto en un script de tela. Recordaré citar la variable.Cuando busco 'git check if branch' en un motor de búsqueda, esta página es la primera que veo.
Obtengo lo que quiero, pero me gustaría proporcionar una respuesta actualizada ya que la publicación original era de 2011.
Esto es esencialmente lo mismo que la respuesta aceptada, pero no necesita escribir "refs / heads /"
fuente
git rev-parse --verify
solo le indica si dicho objeto existe en el repositorio (es decir, devolverá 0 para cualquier valor<branch_name>
que se traduzca en un objeto de cualquier tipo en el repositorio). No te dice si ese objeto es una rama o no.Casi ahí.
Simplemente omita el
--verify
y--quiet
y obtendrá el hash si la rama existe o nada si no existe.Asignarlo a una variable y buscar una cadena vacía.
fuente
Creo que puedes usar
git show-branch
aquí.Entonces, $? == 0 indicaría que la rama existe y no tiene que profundizar en la plomería de referencias / cabezas / en absoluto. Siempre que no pase
-r
a show-branch, solo operará en sucursales locales.fuente
git show-branch
es un comando de porcelana . Como dije en mi pregunta, prefiero no usar comandos de porcelana en un script si hay equivalentes de plomería disponibles. Ver kernel.org/pub/software/scm/git/docsgit show-branch refs/heads/[branch]
ogit show-branch refs/remotes/origin/[branch]
.Recomiendo
git show-ref --quiet refs/heads/$name
.--quiet
significa que no hay salida, lo cual es bueno porque entonces puedes verificar limpiamente el estado de salidarefs/heads/$name
límites a las sucursales locales y coincide con los nombres completos (de lo contrariodev
coincidiríadevelop
)Uso en un script:
fuente
Para usar en un script:
Esto saldrá
0
si y solo si<branch-name>
existe como una sucursal local.Ejemplo:
fuente
En el script por lotes de Windows es un poco diferente,
fuente
Llamémoslo
git is_localbranch
(necesita agregar un alias.gitconfig
).Uso:
Fuente:
fuente
El resultado de la revisión de mi 'Edición sugerida' a la 'Actualización' en la pregunta inicial fue 'Debería haber sido escrito como un comentario o una respuesta', así que lo estoy publicando aquí:
La otra forma propuesta no solo verificará las ramas, sino cualquier referencia con dicho nombre @jhuynh .
Problema con una 'Actualización' en la detención inicial explicada:
Supongamos y verifiquemos que 'master.000' es solo una etiqueta, tal rama local no existe, grep devuelve una entrada que es una etiqueta. Aún así, rev-parse devolverá 0 si existe una referencia, incluso si dicha rama local no existe. Esta es una coincidencia falsa, exactamente como lo menciona @ paul-s
fuente
fuente
Sí, hay uno.
Consulte https://git-scm.com/docs/git-rev-parse donde puede encontrar el conjunto de argumentos y la función.
fuente
Ni
git show-ref
tampocogit rev-parse
funciona en mi caso.Terminé con esto
Puedes hacerlo también con un archivo de script
fuente
Si puedes lograr incluir grep.
fuente
grep
como un metacarácter.abc
, coincidirá si hay una rama llamadaabcdef
.Para usar en un script, recomiendo el siguiente comando:
Tenga en cuenta que
<repo_url>
solo puede ser un "." para especificar el repositorio local si está dentro de su estructura de directorio, la ruta a un repositorio local o la dirección de un repositorio remoto.El comando devuelve un 0 si
<branch_name>
no está presente de 1 si está presente.fuente
luego verifique que el valor de retorno sea 0 o 1.
fuente