Есть ли способ вызвать хук после того, как новая ветка была проверена в Git?
Есть ли способ вызвать хук после того, как новая ветка была проверена в Git?
4 ответа
Если один из этих хуков не сделает этого, я бы удивился:
https://schacon.github.io/git/githooks.html
Может быть этот:
пост-контроль
Этот хук вызывается при запуске git-checkout после обновления рабочего дерева. Для ловушки задаются три параметра: ссылка на предыдущий заголовок, ссылка на новый заголовок (который может или не мог измениться) и флаг, указывающий, была ли проверка извлечением ветвления (изменение ветвей, флаг =1) или извлечение файла (извлечение файла из индекса, flag=0). Этот хук не может повлиять на результат git-checkout.
Git-хук - это скрипт, размещенный в специальном месте вашего хранилища:
.git / Крючки
Скрипт может быть любого типа, который вы можете выполнить в вашей среде, например bash, python, ruby и т. Д.
Хук, который выполняется после оформления заказа, является пост-оформлением заказа. Из документов:
... крючку дается три параметра...
Пример:
Создать хук (скрипт):
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
Пример содержимого крючка:
#!/bin/bash
set -e
printf '\npost-checkout hook\n\n'
prevHEAD=$1
newHEAD=$2
checkoutType=$3
[[ $checkoutType == 1 ]] && checkoutType='branch' ||
checkoutType='file' ;
echo 'Checkout type: '$checkoutType
echo ' prev HEAD: '`git name-rev --name-only $prevHEAD`
echo ' new HEAD: '`git name-rev --name-only $newHEAD`
Примечание. Шебанг в первой строке указывает на тип сценария.
Этот скрипт (git hook) будет захватывать только три переданных параметра и печатать их в удобном для человека формате.
Подобно другим, но проверяет, что ветвь была проверена один раз.
#!/bin/bash
# this is a file checkout – do nothing
if [ "$3" == "0" ]; then exit; fi
BRANCH_NAME=$(git symbolic-ref --short -q HEAD)
NUM_CHECKOUTS=`git reflog --date=local | grep -o ${BRANCH_NAME} | wc -l`
#if the refs of the previous and new heads are the same
#AND the number of checkouts equals one, a new branch has been created
if [ "$1" == "$2" ] && [ ${NUM_CHECKOUTS} -eq 1 ]; then
git push origin ${BRANCH_NAME}
fi
post-checkout
Крюк получает три параметра:
- Ссылка на предыдущую ГОЛОВУ
- Ref новой головы
- Является ли это проверкой файла (
0
) или отделение проверки (1
)
Вы можете использовать тот факт, что ветвь, созданная из текущего HEAD, будет иметь одинаковое значение для параметров 1 и 2.
cat > .git/hooks/post-checkout <<"EOF"
if [ "$3" == "0" ]; then exit; fi
if [ "$1" == "$2" ]; then
echo "New branch created. (Probably)."
fi
EOF
chmod u+x .git/hooks/post-checkout
Ограничения:
- Проверка существующей ветви, которая оказывается в том же заголовке, что и текущий заголовок, обманет его.
- Создание новой ветки не из текущей HEAD не будет обнаружено.