2016-06-17 15 views
6

Sono molto pessimo con lo script di shell (con bash), sto cercando un modo per controllare se il ramo git corrente è "x", e abortire script se non è "x".bash script per verificare se il corrente 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" 

, ma questo non è giusto

+2

Dato che il codice è sintatticamente non valido, [shellcheck. net] (http://shellcheck.net) dovrebbe essere il tuo primo ricorso. – mklement0

risposta

16

Utilizzare git rev-parse --abbrev-ref HEAD per ottenere il nome del ramo corrente.

allora è solo una questione di semplicemente confrontando i valori nello script:

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

echo 'Do stuff'; 
+1

Nota a margine: 'git rev-parse --abbrev-ref HEAD' è il modo giusto per questo caso, in cui si desidera ottenere qualcosa indietro (e non un errore) se HEAD è attualmente staccato. Per distinguere il caso HEAD distaccato, usa invece 'git symbol-ref HEAD'. – torek

3

si desidera utilizzare exit invece di return.

4

Una possibilità potrebbe essere quella di analizzare l'output del comando git branch:

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

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

Ma una variante che utilizza git i comandi interni per ottenere solo il nome del ramo attivo come suggerito da @knittl sono meno inclini agli errori e preferibili