2016-06-17 1 views
6

ich bin sehr schlecht bei shell scripting (mit bash), suche ich nach einem weg nach überprüfe ob der aktuelle git zweig "x" ist, und brich den ab Skript, wenn es nicht "x" ist.bash script um zu überprüfen, ob der aktuelle git branch = "x"

#!/usr/bin/env bash 

    CURRENT_BRANCH="$(git branch)" 
    if [[ "$CURRENT_BRANCH" -ne "master" ]]; then 
      echo "Aborting script because you are not on the master branch." 
      return;  # I need to abort here! 
    fi 

    echo "foo" 

aber das ist nicht ganz richtig

+2

Vorausgesetzt, dass Ihr Code syntaktisch ungültig ist, [Shellcheck. net] (http://shellcheck.net) sollte Ihre erste Zuflucht sein. – mklement0

Antwort

16

Verwenden Sie git rev-parse --abbrev-ref HEAD, um den Namen des aktuellen Zweiges zu erhalten.

Dann ist es nur eine Frage der einfach Wert in Ihrem Skript zu vergleichen:

BRANCH=$(git rev-parse --abbrev-ref HEAD) 
if [[ "$BRANCH" != "x" ]]; then 
    echo 'Aborting script'; 
    exit 1; 
fi 

echo 'Do stuff'; 
+1

Randnotiz: 'git rev-parse --abbrev-ref HEAD' ist der richtige Weg für diesen Fall, wo Sie etwas zurückbekommen wollen (und keinen Fehler), wenn HEAD gerade gelöst ist. Um den abgetrennten HEAD-Fall zu unterscheiden, verwenden Sie stattdessen 'git symbolic-ref HEAD'. – torek

3

Sie wollen exit statt return verwenden.

4

Eine Option wäre die Ausgabe des git branch Befehls zu analysieren:

BRANCH=$(git branch | sed -nr 's/\*\s(.*)/\1/p') 

if [ -z $BRANCH ] || [ $BRANCH != "master" ]; then 
    exit 1 
fi 

Aber eine Variante, die git verwendet interne Befehle, um nur den aktiven Zweignamen zu erhalten, wie von @ Knittl vorgeschlagen, ist weniger fehleranfällig und vorzuziehen

Verwandte Themen