Не удалось обнаружить ответвление из Git post-receive hook - PullRequest
15 голосов
/ 12 мая 2011

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

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

Однако я обнаружил, что нетНезависимо от того, какую ветку я нажимаю из переменной $ branch, устанавливается значение 'master'.

Есть идеи?

Ответы [ 5 ]

24 голосов
/ 12 мая 2011

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

oldRev (пробел) newRev (пробел) refName (перевод строки)

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

while read oldrev newrev ref
do
    echo "$ref"
done
10 голосов
/ 02 ноября 2012

Вы также можете сделать что-то подобное, используя подстановку переменных bash:

read oldrev newrev ref

branchname=${ref#refs/heads/}

git checkout ${branchname}
2 голосов
/ 19 октября 2012

Оба эти ответа верны, но у меня возникли проблемы с получением стандартного сообщения для следующей обычной функции 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
2 голосов
/ 11 сентября 2012

Решение Магнуса не сработало для меня, но это сделало:

#!/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"
1 голос
/ 12 мая 2011

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

...