Есть ли способ вызвать хук после того, как новая ветка была проверена в Git?

Есть ли способ вызвать хук после того, как новая ветка была проверена в Git?

4 ответа

Решение

Если один из этих хуков не сделает этого, я бы удивился:

https://schacon.github.io/git/githooks.html

Может быть этот:

пост-контроль

Этот хук вызывается при запуске git-checkout после обновления рабочего дерева. Для ловушки задаются три параметра: ссылка на предыдущий заголовок, ссылка на новый заголовок (который может или не мог измениться) и флаг, указывающий, была ли проверка извлечением ветвления (изменение ветвей, флаг =1) или извлечение файла (извлечение файла из индекса, flag=0). Этот хук не может повлиять на результат git-checkout.

Git-хук - это скрипт, размещенный в специальном месте вашего хранилища:

.git / Крючки

Скрипт может быть любого типа, который вы можете выполнить в вашей среде, например bash, python, ruby ​​и т. Д.

Хук, который выполняется после оформления заказа, является пост-оформлением заказа. Из документов:

... крючку дается три параметра...

Пример:

  1. Создать хук (скрипт):

    touch .git/hooks/post-checkout
    chmod u+x .git/hooks/post-checkout
    
  2. Пример содержимого крючка:

#!/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 Крюк получает три параметра:

  1. Ссылка на предыдущую ГОЛОВУ
  2. Ref новой головы
  3. Является ли это проверкой файла (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 не будет обнаружено.
Другие вопросы по тегам