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

StackOverflow https://stackoverflow.com/questions/1011557

  •  06-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

после оформления заказа

Этот хук вызывается при выполнении git-проверки после обновления рабочего дерева.Крюк с учетом трех параметров:ссылка на предыдущий ЗАГОЛОВОК, ссылка на новый ЗАГОЛОВОК (который мог измениться, а мог и не измениться), и флаг, указывающий, была ли проверка проверкой филиала (изменение ветвей, флаг=1) или файла проверка (извлечение файла из индекса, флаг=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`

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

Этот скрипт (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. Ссылка на новую ГОЛОВКУ
  3. Является ли это проверкой файла (0) или оформить заказ в филиале (1)

Вы можете использовать тот факт, что ветвь, созданная из текущего ЗАГОЛОВКА, будет иметь одинаковое значение для параметров 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

Ограничения:

  • Проверка существующей ветви, которая находится в том же начале, что и текущая, обманет ее.
  • Создание новой ветки нет из текущей ГОЛОВКИ не будет обнаружено.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top