¿Hay alguna manera de desencadenar un gancho después de que se haya extraído una nueva rama en Git?
Pregunta
¿Hay alguna forma de desencadenar un enlace después de que se haya extraído una nueva rama en Git?
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 :
-
Crear el gancho (script):
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
-
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:
- Ref de HEAD anterior
- Ref de nuevo HEAD
- 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á.