GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener el nombre de la rama git actual en una variable en un script de Shell?

El * está expandido, lo que puedes hacer es usar sed en lugar de grep y obtener el nombre de la rama inmediatamente:

branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')

Y una versión usando gitsimbolic-ref, como lo sugiere Noufal Ibrahim

branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

Para profundizar en la expansión, (como ya lo hizo marco), la expansión ocurre en el eco, cuando haces echo $test con $test que contiene * master luego el * se expande de acuerdo con las reglas normales de expansión. Para suprimir esto, habría que citar la variable, como se muestra en marco:echo "$test" . Alternativamente, si se deshace del asterisco antes de repetirlo, todo estará bien, p. echo ${test:2} simplemente repetirá master . Alternativamente, podría asignarlo de nuevo como ya propuso:

branch=${test:2}
echo $branch

Esto hará eco master , como tú querías.


Usaría el git-symbolic-ref comando en el núcleo de git. Si dices git-symbolic-ref HEAD , obtendrá el nombre de la rama actual.


Ampliando la respuesta de Noufal Ibrahim, use el --short marcar con git-symbolic-ref , no hay necesidad de preocuparse por sed .

He estado usando algo como esto en ganchos y funciona bien:

#!/bin/bash

branch=$(git symbolic-ref --short HEAD)

echo
echo "**** Running post-commit hook from branch $branch"
echo

Eso genera "**** Ejecutando gancho posterior a la confirmación desde el maestro de rama"

Tenga en cuenta que git-symbolic-ref solo funciona si estás en un repositorio. Por suerte .git/HEAD , como un remanente de los primeros días de Git, contiene la misma referencia simbólica. Si desea obtener la rama activa de varios repositorios de git, sin atravesar directorios, puede usar una sola línea de bash como esta:

for repo in */.git; do branch=$(cat $repo/HEAD); echo ${repo%/.git} :  ${branch##*/}; done

Que genera algo como:

repo1 : master  
repo2 : dev  
repo3 : issue12

Si quiere ir más allá, la referencia completa contenida en .git/HEAD también es una ruta relativa a un archivo que contiene el hash SHA-1 de la última confirmación de la rama.


Linux
  1. ¿Cómo asignar la salida de un comando a una variable de shell?

  2. ¿Cómo obtener la dirección IP propia y guardarla en una variable en un script de Shell?

  3. ¿Cómo sé el nombre del archivo de script en un script Bash?

  4. ¿Cómo almacenar un comando en una variable en un script de shell?

  5. ¿Cómo obtengo el nombre de usuario en un Makefile?

Cómo almacenar un comando de Linux como una variable en el script de Shell

¿Cómo pasar un argumento de línea de comando a un script de Shell?

Leer valores en una variable de shell desde una tubería

¿Cómo obtener el contenido de una página web en una variable de shell?

¿Cómo cambiar el idioma de mi git?

¿Cómo obtener el sistema operativo actual en MSBuild?