Не удалось обнаружить ветку из Git после приема

У меня есть настройка приема сообщений на удаленном репо, которая пытается определить название ветки входящего нажатия следующим образом:

$branch = `git rev-parse --abbrev-ref HEAD`

То, что я нахожу, однако, заключается в том, что независимо от того, какая ветвь, которую я нажимаю из моей переменной ветвления $, устанавливается с помощью "master".

Любые идеи?

Ответы

Ответ 1

Крюк post-receive получает те же данные, что и pre-receive, а не как аргументы, но из stdin. Для всех ссылок отправлено следующее:

oldRev (пробел) newRev (пробел) refName (строка)

Вы можете проанализировать имя ссылки с помощью этого bash script:

while read oldrev newrev ref
do
    echo "$ref"
done

Ответ 2

Вы также можете сделать что-то подобное с помощью замены bash:

read oldrev newrev ref

branchname=${ref#refs/heads/}

git checkout ${branchname}

Ответ 3

Решение Magnus не работало для меня, но this:

#!/bin/bash

echo "determining branch"

if ! [ -t 0 ]; then
  read -a ref
fi

IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"

if [ "master" == "$branch" ]; then
  echo 'master was pushed'
fi

if [ "staging" == "$branch" ]; then
  echo 'staging was pushed'
fi

echo "done"

Ответ 4

Оба этих ответа верны, но мне не удалось получить stdin для следующей общей функции post-receive-email. Вот что я закончил:

read oldrev newrev ref
echo "$oldrev" "$newrev" "$ref" | . /usr/share/git-core/contrib/hooks/post-receive-email


if [ "refs/heads/qa" == "$ref" ]; then
  # Big Tuna YO!
  wget -q -O - --connect-timeout=2 http://127.0.0.1:3000/hooks/build/qa_now
fi

Ответ 5

Вам нужно прочитать аргументы, которые передаются в script. Это должно иметь название ветки и новые и старые версии и запускать для каждой ветки, нажатой