¿Hay alguna manera de desencadenar un gancho después de que se haya extraído una nueva rama en Git?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

¿Hay alguna forma de desencadenar un enlace después de que se haya extraído una nueva rama en Git?

¿Fue útil?

Solución

Si uno de estos ganchos no lo hace, me sorprendería:

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

Quizás este :

  

post-pago

     

Este gancho se invoca cuando un   git-checkout se ejecuta después de tener   actualizado el worktree. El gancho es   dados tres parámetros: la referencia de la   HEAD anterior, la referencia del nuevo HEAD   (que puede o no haber cambiado),   y una bandera que indica si el   pago fue un pago de sucursal   (cambio de ramas, bandera = 1) o un archivo   pago (recuperar un archivo de la   índice, bandera = 0). Este gancho no puede   afectar el resultado de git-checkout.

Otros consejos

Un git hook es un script ubicado en una ubicación especial de su repositorio, esa ubicación es:

  

.git / hooks

El script puede ser de cualquier tipo que pueda ejecutar en su entorno, es decir, bash, python, ruby, etc.

El enlace que se ejecuta después de un pago es post-pago . De los documentos:

  

... El gancho tiene tres parámetros ...

Ejemplo :

  1. Crear el gancho (script):

    touch .git/hooks/post-checkout
    chmod u+x .git/hooks/post-checkout
    
  2. Gancho de contenido de muestra:

#!/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: El shebang en la primera línea indica el tipo de script.

Este script (git hook) solo capturará los tres parámetros pasados ??y los imprimirá en un formato amigable para los humanos.

Similar a otros, pero verifica que la rama se haya desprotegido una 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

El post-checkout hook recibe tres parámetros:

  1. Ref de HEAD anterior
  2. Ref de nuevo HEAD
  3. Si se trata de un pago de archivos ( 0 ) o de pago de sucursal ( 1 )

Puede usar el hecho de que una rama creada a partir del HEAD actual tendrá el mismo valor para los parámetros 1 y 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

Limitaciones:

  • Verificando una rama existente que está en el mismo HEAD que el HEAD actual lo engañará.
  • Crear una nueva rama no desde el HEAD actual no se detectará.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top