GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir le nom de la branche git actuelle dans une variable dans un script shell ?

Le * est développé, ce que vous pouvez faire est d'utiliser sed au lieu de grep et obtenir le nom de la branche immédiatement :

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

Et une version utilisant git symbolique-ref, comme suggéré par Noufal Ibrahim

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

Pour élaborer sur l'expansion, (comme marco l'a déjà fait), l'expansion se produit dans l'écho, lorsque vous faites echo $test avec $test contenant * master puis le * est agrandie selon les règles normales d'expansion. Pour supprimer celui-ci, il faudrait citer la variable, comme indiqué par marco :echo "$test" . Alternativement, si vous vous débarrassez de l'astérisque avant de l'écho, tout ira bien, par exemple. echo ${test:2} fera simplement écho master . Vous pouvez également l'attribuer à nouveau comme vous l'avez déjà proposé :

branch=${test:2}
echo $branch

Cela renverra master , comme vous le vouliez.


J'utiliserais le git-symbolic-ref commande dans le noyau git. Si vous dites git-symbolic-ref HEAD , vous obtiendrez le nom de la branche actuelle.


En développant la réponse de Noufal Ibrahim, utilisez le --short indicateur avec git-symbolic-ref , pas besoin de s'embêter avec sed .

J'utilise quelque chose comme ça dans les crochets et ça marche bien :

#!/bin/bash

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

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

Cela affiche "**** Running post-commit hook from branch master"

Notez que git-symbolic-ref ne fonctionne que si vous êtes dans un référentiel. Heureusement .git/HEAD , en tant que vestige des débuts de Git, contient la même réf symbolique. Si vous souhaitez obtenir la branche active de plusieurs dépôts git, sans traverser de répertoires, vous pouvez utiliser une ligne bash comme celle-ci :

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

Qui affiche quelque chose comme :

repo1 : master  
repo2 : dev  
repo3 : issue12

Si vous voulez aller plus loin, la ref complète contenue dans .git/HEAD est également un chemin relatif vers un fichier contenant le hachage SHA-1 du dernier commit de la branche.


Linux
  1. Comment affecter la sortie d'une commande à une variable Shell ?

  2. Comment obtenir la propre adresse IP et l'enregistrer dans une variable dans un script shell ?

  3. Comment connaître le nom du fichier de script dans un script Bash ?

  4. Lire des valeurs dans une variable shell à partir d'un tube

  5. Comment obtenir le contenu d'une page Web dans une variable shell ?

Comment stocker une commande Linux en tant que variable dans un script shell

Comment stocker une commande dans une variable dans un script shell ?

Comment puis-je obtenir le nom d'utilisateur dans un Makefile ?

Comment obtenir le PYTHONPATH en shell?

Comment obtenir la résolution actuelle du moniteur ou le nom du moniteur (LVDS, VGA1, etc.)

Comment puis-je obtenir le nom de la distribution et le numéro de version dans un simple script shell ?