Existe uma maneira para acionar um gancho depois de um novo ramo foi check-out no Git?
Pergunta
Existe uma maneira para acionar um gancho depois de um novo ramo foi check-out no Git?
Solução
Se um desses ganchos não vai fazê-lo eu ficaria espantado:
https://schacon.github.io/git/githooks.html
esta :
pós-checkout
Este gancho é chamado quando um git-verificação geral é executado após ter atualizou o worktree. O gancho é dado três parâmetros: o árbitro do CABEÇA anterior, o árbitro do novo chefe (O qual pode ou não ter mudado), e uma bandeira indicando se a check-out foi um check-out branch (Mudando ramos, flag = 1) ou um arquivo check-out (recuperar um arquivo do índice, bandeira = 0). Este gancho não pode afetar o resultado do git-checkout.
Outras dicas
Um gancho git é um script colocado em um local especial de seu repositório, esse local é:
.git / hooks
O script pode ser qualquer tipo que você pode executar em seu ambiente ou seja, bash, Python, Ruby etc.
O gancho que é executado após o check-out é pós-checkout . De docs:
... O gancho é dado três parâmetros ...
-
Criar o gancho (roteiro):
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
-
Gancho conteúdo de amostra:
#!/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`
Nota:. O shebang na primeira linha indica o tipo de script
Este script (gancho git) só irá capturar os três parâmetros passados ??e imprimi-las em um formato amigável-humana.
Semelhante a outros, mas verifica que o ramo tenha sido verificada uma vez.
#!/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
O gancho post-checkout
recebe três parâmetros:
- Ref da cabeça anterior
- Ref de novo chefe
- Se esta é uma verificação de arquivo (
0
) ou check-out ramo (1
)
Você pode usar o fato de que um ramo criado a partir da cabeça atual terá o mesmo valor para os parâmetros 1 e 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
Limitações:
- Verificar se um ramo existente, que passa a ser ao mesmo CABEÇA como o atual chefe vai enganá-lo.
- Criar um novo ramo não do chefe atual não será detectado.