GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie bekomme ich den Namen des aktuellen Git-Zweigs in eine Variable in einem Shell-Skript?

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

vorgeschlagen
branch=$(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.


Linux
  1. Wie weist man die Ausgabe eines Befehls einer Shell-Variablen zu?

  2. Wie erhalte ich den Distributionsnamen und die Versionsnummer in einem einfachen Shell-Skript?

  3. Wie erhalte ich die externe IP-Adresse in einem Shell-Skript?

  4. Wie erhalte ich die eigene IP-Adresse und speichere sie in einer Variablen in einem Shell-Skript?

  5. Woher weiß ich den Namen der Skriptdatei in einem Bash-Skript?

So speichern Sie einen Linux-Befehl als Variable im Shell-Skript

Variablenbereich für Bash-Shell-Skripte und Funktionen im Skript

Wie erhalte ich den Exit-Code des erzeugten Prozesses im erwarteten Shell-Skript?

Wie bekomme ich das aktuelle Betriebssystem in MSBuild?

So erhalten Sie die aktuelle Monitorauflösung oder den Monitornamen (LVDS, VGA1 usw.)

Wie kann ich den Distributionsnamen und die Versionsnummer in einem einfachen Shell-Skript erhalten?