2015-05-26 2 views
1

Я пытаюсь написать сценарий оболочки, который должен выйти из строя, если текущая ветвь git не соответствует предварительно определенному значению.Как получить текущую ветвь git в оболочке

if $gitBranch != 'my-branch'; then 
    echo 'fail' 
    exit 1 
fi 

К сожалению, мои оболочки навыки сценариев не до нуля: Как получить текущую ветвь Git в моей переменной?

+0

Это может быть дубликат, но это, безусловно, не дубликат связанного вопроса. –

+0

Для потомков мой предложенный дубликат был: [Как сравнить строки в сценарии Bash] (http://stackoverflow.com/q/2237080/1983854), так как похоже, что здесь не хватает. – fedorqui

ответ

7

Чтобы получить имя текущей ветви: git rev-parse --abbrev-ref HEAD

Таким образом, чтобы проверить:

if test "$(git rev-parse --abbrev-ref HEAD)" != my-branch; then 
    echo Current branch is not my-branch >&2 
    exit 1 
fi 
+1

Yup, хотя кто-то действительно использует 'test', а не' ['? Я бы предложил 'if [" $ (git rev-parse --abbrev-ref HEAD) "! = 'My-branch'];' – Mort

+1

Я могу быть единственным, кто предпочитает 'test', но я настоятельно рекомендую против '. Количество путаницы, вызванное людьми, думающими, что '' 'является частью грамматики оболочки, очень велико. Использование 'test' делает намного понятнее, что это команда. И кто хочет иметь окончательный аргумент ']'? Это просто странно. –

+0

Несомненно, это вызывает путаницу - но вам нужно только изучить его один раз. –

1

Вы можете получить ветвь, используя git branch и регулярное выражение:

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

После этого вам просто нужно сделать свой тест.

+1

Команда 'sed' может быть написана более просто как' sed -n '/^\ */s /// p''. –

+0

@Keith Ты прав. Я получил этот фрагмент где-то в Интернете, и, поскольку он работал, я никогда не пытался его улучшить, но ваше упрощение полностью работает. – statox

Смежные вопросы