GNU/Linux >> Znalost Linux >  >> Linux

Jak získat název aktuální větve git do proměnné v shell skriptu?

* je rozšířeno, můžete použít sed místo grep a okamžitě získat název větve:

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

A verze používající git symbolic-ref, jak navrhuje Noufal Ibrahim

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

Abychom rozbalení upřesnili, (jak už to udělal Marco), rozšíření se děje v echu, když uděláte echo $test s $test obsahující * master pak * se rozšiřuje podle normálních pravidel rozšiřování. Abychom to potlačili, museli bychom uvádět proměnnou, jak ukazuje marco:echo "$test" . Případně, když se hvězdičky zbavíte, než ji ozvěte, bude vše v pořádku, např. echo ${test:2} bude pouze echo master . Případně jej můžete přiřadit znovu, jak jste již navrhli:

branch=${test:2}
echo $branch

To bude echo master , jak jste chtěli.


Použil bych git-symbolic-ref příkaz v jádře git. Řeknete-li git-symbolic-ref HEAD , získáte název aktuální pobočky.


Pro rozšíření odpovědi Noufala Ibrahima použijte --short příznak s git-symbolic-ref , není třeba se trápit s sed .

Něco takového jsem v hácích používal a funguje to dobře:

#!/bin/bash

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

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

To vypíše "**** Running post-commit hook from branch master"

Všimněte si, že git-symbolic-ref funguje pouze v případě, že jste v úložišti. Naštěstí .git/HEAD , jako pozůstatek z počátků Gitu, obsahuje stejné symbolické ref. Pokud chcete získat aktivní větev několika git repozitářů bez procházení adresářů, můžete použít bash one-liner takto:

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

Výsledkem je něco jako:

repo1 : master  
repo2 : dev  
repo3 : issue12

Pokud chcete jít dále, celý ref obsažený v .git/HEAD je také relativní cesta k souboru obsahujícímu hash SHA-1 posledního potvrzení větve.


Linux
  1. Jak přiřadit výstup příkazu proměnné shellu?

  2. Jak získat název distribuce a číslo verze v jednoduchém skriptu Shell?

  3. Jak získat externí IP adresu ve skriptu Shell?

  1. Jak získat vlastní IP adresu a uložit ji do proměnné ve skriptu Shell?

  2. Jak poznám název souboru skriptu ve skriptu Bash?

  3. Číst hodnoty do proměnné shellu z kanálu

  1. Jak získat obsah webové stránky v proměnné shellu?

  2. Jak získat PYTHONPATH v shellu?

  3. Variabilní rozsah pro skripty bash shell a funkce ve skriptu