Das * wird erweitert, was Sie tun können, ist sed anstelle von grep zu verwenden und erhalten sofort den Namen des Zweigs:
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
Und eine Version, die git symbolic-ref verwendet, wie von Noufal Ibrahim
vorgeschlagenbranch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
Um auf die Erweiterung einzugehen, (wie Marco es bereits getan hat) geschieht die Erweiterung im Echo, wenn Sie echo $test
ausführen mit $test
enthält * master
dann die *
wird nach den normalen Erweiterungsregeln erweitert. Um dies zu unterdrücken, müsste man die Variable in Anführungszeichen setzen, wie Marco zeigt:echo "$test"
. Wenn Sie alternativ das Sternchen entfernen, bevor Sie es wiederholen, ist alles in Ordnung, z. echo ${test:2}
gibt nur master
zurück . Alternativ könntest du es wie schon vorgeschlagen neu zuweisen:
branch=${test:2}
echo $branch
Dies gibt master
zurück , wie Sie wollten.
Ich würde den git-symbolic-ref
verwenden Befehl im Git-Core. Wenn Sie git-symbolic-ref HEAD
sagen , erhalten Sie den Namen des aktuellen Zweigs.
Erweitern Sie die Antwort von Noufal Ibrahim und verwenden Sie den --short
mit git-symbolic-ref
kennzeichnen , brauchen Sie sich nicht mit sed
herumzuärgern .
Ich habe so etwas in Hooks verwendet und es funktioniert gut:
#!/bin/bash
branch=$(git symbolic-ref --short HEAD)
echo
echo "**** Running post-commit hook from branch $branch"
echo
Das gibt "**** Running post-commit hook from branch master"
aus
Beachten Sie, dass git-symbolic-ref
funktioniert nur, wenn Sie sich in einem Repository befinden. Zum Glück .git/HEAD
, als Überbleibsel aus den Anfängen von Git, enthält dieselbe symbolische Referenz. Wenn Sie den aktiven Zweig mehrerer Git-Repositories erhalten möchten, ohne Verzeichnisse zu durchlaufen, können Sie einen Bash-Einzeiler wie diesen verwenden:
for repo in */.git; do branch=$(cat $repo/HEAD); echo ${repo%/.git} : ${branch##*/}; done
Was so etwas ausgibt wie:
repo1 : master
repo2 : dev
repo3 : issue12
Wenn Sie weiter gehen möchten, finden Sie die vollständige Referenz in .git/HEAD
ist auch ein relativer Pfad zu einer Datei, die den SHA-1-Hash des letzten Commits des Branches enthält.