Existe uma maneira para acionar um gancho depois de um novo ramo foi check-out no Git?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Existe uma maneira para acionar um gancho depois de um novo ramo foi check-out no Git?

Foi útil?

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 ...

Exemplo:

  1. Criar o gancho (roteiro):

    touch .git/hooks/post-checkout
    chmod u+x .git/hooks/post-checkout
    
  2. 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:

  1. Ref da cabeça anterior
  2. Ref de novo chefe
  3. 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.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top