remota - ¿Hay una mejor manera de averiguar si existe una sucursal local de git?
git push (12)
Estoy usando el siguiente comando para averiguar si existe una rama de git local con 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 mantenerme alejado de los comandos de porcelana si es posible.
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
Actualizar
Resulta que hay otra manera . Gracias @jhuynh .
git rev-parse --verify <branch-name>
# $? == 0 means local branch with name <branch-name> exists.
$ git branch --list $ branch_name | grep $ branch_name luego verifica que el valor de retorno sea 0 o 1.
Casi ahí.
Solo deja fuera el --verify
y --quiet
y obtienes el hash si la rama existe o nada si no es así.
Asignarlo a una variable y buscar una cadena vacía.
exists=`git show-ref refs/heads/<branch-name>`
if [ -n "$exists" ]; then
echo ''branch exists!''
fi
Creo que puedes usar git show-branch
aquí.
$ git show-branch --list
[master] test
* [testbranch] test
$ git show-branch testbranch
[testbranch] test
$ echo $?
0
$ git show-branch nonexistantbranch
fatal: bad sha1 reference nonexistantbranch
$ echo $?
128
Entonces, $? == 0 indicaría que la rama existe y no tiene que cavar en la fontanería de refs / heads / en absoluto. Siempre que no pase -r
a show-branch, solo operará en sucursales locales.
Cuando busco ''git check si existe una rama'' en un motor de búsqueda, esta 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.
git rev-parse --verify <branch_name>
Esto es esencialmente lo mismo que la respuesta aceptada, pero no es necesario escribir en "refs / heads /"
En el script por lotes de Windows es un poco diferente,
git rev-parse --verify <branch>
if %ERRORLEVEL% == 0 (
echo "Yes"
) else (
echo "No"
)
Hasta donde yo sé, esa es la mejor manera de hacerlo en un guión. No estoy seguro de que haya mucho más que añadir a eso, pero bien podría haber una respuesta que simplemente diga "Ese comando hace todo lo que quieres" :)
Lo único que debe tener cuidado es que los nombres de las ramas pueden tener caracteres sorprendentes en ellos, por lo que es posible que desee citar <branch-name>
.
Para usar en un script, recomiendo el siguiente comando:
git ls-remote --heads <repo_url> "<branch_name>" | wc -l
Tenga en cuenta que <repo_url>
puede ser simplemente un "." para especificar el repositorio local si se encuentra 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.
Quería usar el navegador, así que hice una pequeña aplicación que le permite verificar la validez del nombre de su sucursal. Está respaldado por git, así que sabes lo que obtienes.
https://branch-checker.herokuapp.com/validate?branch=not//valid
Recomiendo git show-ref --quiet refs/heads/$name
.
--quiet
significa que no hay salida, lo que es bueno porque entonces puedes verificar limpiamente el estado de la salida.refs/heads/$name
limita a las ramas locales y coincide con los nombres completos (de lo contrario,dev
coincidiría con eldevelop
)
Uso en un script:
if git show-ref --quiet refs/heads/develop; then
echo develop branch exists
fi
Si puede lograr incluir grep.
git branch | grep -q <branch>
Vamos a llamarlo git is_localbranch
(debe agregar un alias en .gitconfig
).
Uso:
$ git is_localbranch BRANCH
Fuente:
git branch | grep -w $1 > /dev/null
if [ $? = 0 ]
then
echo "branch exists"
fi
El resultado de la revisión en 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 también cualquier referencia con dicho nombre @jhuynh .
git rev-parse --verify <reference-name>
# $? == 0 means reference with <reference-name> exists.
Problema con una ''Actualización'' sobre quiestion inicial explicada:
Supongamos y comprobamos que ''master.000'' es solo una etiqueta, tal rama local no existe, grep devuelve una entrada que es una etiqueta. Aún rev-parse devolverá 0 si la referencia existe, incluso si dicha rama local no existe. Esta es una coincidencia falsa, exactamente como lo menciona @ paul-s
$ git show-ref |grep master.000
f0686b8c16401be87e72f9466083d29295b86f4a refs/tags/master.000
$ git rev-parse --verify master.000
f0686b8c16401be87e72f9466083d29295b86f4a
$ echo $?
0