Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Если один из этих крючков не сделает этого, я буду поражен

http://schacon.github.com/git/githooks.html

Возможно, этот:

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

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

Ответ 2

A git hook - это script, размещенный в специальном месте вашего репозитория, это местоположение:

.git/Крючки

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

Крюк, который выполняется после проверки, после проверки. Из документов:

... Крючок имеет три параметра...

Пример:

  • Создайте крючок (script):

    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`

Примечание: shebang в первой строке указывает тип script.

Этот script (git hook) будет захватывать только три переданных параметра и печатать их в удобном для пользователя формате.

Ответ 3

Аналогично другим, но проверяет, что ветвь была проверена один раз.

#!/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

Ответ 4

post-checkout hook получает три параметра:

  • Ссылка предыдущей HEAD
  • Ref новой HEAD
  • Это проверка файла (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, что и текущий HEAD, обманет ее.
  • Создание новой ветки не из текущего HEAD не будет обнаружено.