Найти имя ветки Git в хуке после обновления

Я выполняю программу для оповещения CruiseControl каждый раз, когда обновление отправляется в наш удаленный репозиторий. Для этого я использую хук после обновления Git.

Было бы здорово, если бы я мог узнать, какая ветка была зафиксирована, чтобы я мог использовать это, чтобы сообщить CruiseControl, какую ветку нужно построить. Есть ли способ получить доступ к имени ветки в хуке после обновления?


person user489998    schedule 07.09.2011    source источник


Ответы (1)


Первый параметр хука после обновления — это полная ссылка на ветку — например, я вижу «refs/heads/master» для нажатия на «origin master». Итак, пример сценария ловушки, который просто печатает измененную ветку:

#!/bin/sh
branch=$(git rev-parse --symbolic --abbrev-ref $1)
echo Update pushed to branch $branch
exec git update-server-info

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

% git push origin master
Counting objects: 5, done
Writing objects: 100% (3/3), 247 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
remote: Update pushed to branch master
To /tmp/xx/a
    e02d9cd..ab14a08  master -> master

Новая строка, начинающаяся с «remote:», была выведена нашим сценарием ловушки.

person patthoyts    schedule 07.09.2011
comment
Спасибо, Патхойтс. Используя приведенный выше код, я получаю удаленный доступ: hooks/post-update: строка 8: ветка: команда не найдена. якорь - person user489998; 07.09.2011
comment
Я предоставил расширенный образец. Вам нужна строка #!/bin/sh в начале. Кроме того, когда вы устанавливаете переменную в сценарии оболочки, используйте $ для доступа к значению - person patthoyts; 07.09.2011
comment
Эй! Это сделано. Большое спасибо, патхойтс. - person user489998; 07.09.2011
comment
Просто любопытно: почему --symbolic и --abbrev-ref? Кажется, он отлично работает без --symbolic в нескольких случаях, которые я пробовал. - person Simon Whitaker; 15.08.2012
comment
Для тех сред, где $1 не заполнен, см. ответ pauljz здесь: stackoverflow.com/questions/7351551/ - person dazweeja; 08.01.2013
comment
Обратите внимание, что эта ссылка относится к хуку после получения, а этот ответ был для хука после обновления. Они по-разному обрабатывают входные данные. Перехватчики после обновления получают аргументы командной строки, в то время как перехватчики после получения получают аргументы на стандартный ввод. - person patthoyts; 09.01.2013
comment
Спасибо за это! Одного я не понял: почему вы используете exec git update-server-info в качестве последнего оператора в хуке post-update? Это потому, что репозиторий доступен через HTTP? - person Leif; 19.05.2014
comment
@Лейф: Да. И потому что эта команда уже была в скрипте хука. Информация о сервере обновлений была предназначена только для доступа по HTTP, и я думаю, что и для gitweb. - person patthoyts; 20.05.2014
comment
@patthoyts: Ага, понятно. Спасибо за подтверждение моего предположения :) - person Leif; 20.05.2014
comment
Поскольку я нашел это при поиске документов git, потому что это первый результат в Google, я просто оставлю ссылку на документы, в которых указано, как вызываются все перехватчики: git-scm.com/docs/gitooks - person mrfred; 08.11.2018