¿Hay alguna manera de desencadenar un gancho después de que una nueva rama ha sido extraída en Git?¿Hay alguna forma de desencadenar un anzuelo después de que una nueva sucursal ha sido extraída en Git?
Respuesta
Si uno de estos ganchos no lo hará i se sorprenderá
http://schacon.github.com/git/githooks.html
Tal vez éste:
post-pago y envío
Este gancho se invoca cuando un git-checkout se ejecuta después de tener actualizado el árbol de trabajo. El gancho se dado tres parámetros: la ref de la CABEZA anterior, el árbitro de la nueva cabeza de (que puede o no puede haber cambiado), y una bandera que indica si el salida fue un checkout rama (ramas cambiantes , flag = 1) o un archivo pago (recuperando un archivo del índice , flag = 0). Este gancho no puede afectar el resultado de git-checkout.
Un gancho Git es un guión colocado en un lugar especial de su repositorio, que la ubicación es:
.git/ganchos
La secuencia de comandos pueden ser de cualquier tipo que pueda ejecute en su entorno, es decir, bash, python, ruby, etc.
El gancho que se ejecuta después de finalizar la compra es post-checkout. A partir de los documentos:
... El gancho se da tres parámetros ...
Ejemplo:
Crear el gancho (script):
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
Hook contenido de la 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 tinglado en la primera línea indica el tipo de secuencia de comandos.
Este script (git hook) solo capturará los tres parámetros aprobados y los imprimirá en un formato amigable para los humanos.
El post-checkout
hook recibe tres parámetros:
- Ref de la cabeza anterior
- Ref del nuevo jefe
- Si esto es una protección de archivo (
0
) o checkout de un branch (1
)
Puede utilizar el hecho de que una rama creada a partir de la CABEZA 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:
- Comprobación de una rama existente, que pasa a ser en la misma cabeza como la cabeza actual engañar a ella. No se detectará
- Creación de una nueva rama no desde HEAD.
Similar a otros, pero verifica que la rama se ha extraído 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
Esto me puso en el camino correcto, ¡muchas gracias! Ya que está grepping reflog para contar las cajas Creo que uno de gotcha sería si una rama había existido previamente y una nueva rama con el mismo nombre fue creado, esa rama no serían reconocidos como nueva. Ese podría ser el comportamiento deseado o un problema según el caso de uso, pero pensé que lo mencionaría. – Pwnrar
- 1. Deshacer una fusión que ha sido presionada
- 2. funcionalidad de anzuelo de precaptura en git
- 3. ¿Cómo detecta git que un archivo ha sido modificado?
- 4. ¿Alguna herramienta para hacer que git construya cada compromiso en una sucursal en un repositorio separado?
- 5. ¿Hay alguna razón por la que deba trabajar desde una sucursal en Git si soy un desarrollador solitario?
- 6. Confirmar un cambio en más de una sucursal en Git
- 7. ¿Cómo puedo detectar si una extensión de Chrome ha sido habilitada (después de haber sido deshabilitada)
- 8. GIT: ¿Tengo que comprometer mi sucursal antes de consultar otra sucursal, qué hay de escondite?
- 9. deshacer una confirmación en concreto en Git que ha sido empujado a pases remotos
- 10. ¿Cómo comprar una sucursal remota en Git?
- 11. ¿Hay alguna manera de desencadenar un stacktrace cada vez que se utiliza un registrador en particular?
- 12. Editar un mensaje de confirmación incorrecto en Git que ya ha sido empujado
- 13. Mi aplicación de iPhone con un error ha sido aprobada, ¿hay alguna manera de retroceder a una versión anterior?
- 14. ¿Puedo agregar un mensaje/nota/comentario al crear una nueva sucursal en Git?
- 15. Con git, ¿cómo guardo una rama de tema después de que la rama remota principal haya sido actualizada?
- 16. Cómo empujar una nueva sucursal sin historial
- 17. ¿Hay alguna forma de detectar cuándo un visitante regresa a su página después de abrir una nueva ventana?
- 18. ¿Hay alguna forma de obtener las clases que ha cargado un ClassLoader?
- 19. ¿Hay alguna forma de deshacer mi última inserción en Git?
- 20. ¿Hay alguna forma de detener la línea nueva después de una instrucción de impresión en t-sql?
- 21. llamada automáticamente después de que parte método ha sido compuesta en MEF
- 22. raw_input ("") ha sido eliminado de python 3.2
- 23. Después de la clonación de git, no veo mi sucursal
- 24. ¿Hay alguna forma de personalizar la salida de git blame?
- 25. Redireccionando a otra página después de que Response.End() ha sido llamado en C#
- 26. ¿Cómo puedo "desarmar" una clase que ha sido declarada
- 27. ¿Hay alguna manera de hacer que un TextView automáticamente vaya a una nueva línea después de cierta cantidad de caracteres?
- 28. Tome todos mis cambios en la rama actual y muévalos a una nueva sucursal en Git
- 29. ¿No hay línea nueva después de div?
- 30. ¿Hay alguna forma de que PHP detecte una imagen dañada?
¿Conoces alguna forma de saber si esto es el checkout de creación de la rama (además de mirar el nuevo reflog de HEAD)? – pkoch
Parece que sería una buena idea que haga una pregunta completamente nueva. Si lo hace, envíeme el enlace y veré si puedo ayudarlo. ¿Cuál es el problema que estás tratando de resolver? – givanse
Si un commit es la parte superior de varias ramas, 'name-rev' solo da el nombre que viene primero alfabéticamente. Por lo tanto, después de verificar una rama con un nombre que precede alfabéticamente al nombre de la rama original, la línea 'prev HEAD' dará el nombre de la nueva rama. Una solución alternativa: 'thisBranchName = $ (git rev-parse --abbrev-ref HEAD); para la rama en $ (rama git --color = nunca --contiene $ 1 | sed-e 's /^..//'); do if ["$ (git show-ref -s $ branch)" == $ 1] && ["$ branch"! = "$ thisBranchName"]; luego parentBranchName = $ branch; break; fi; done' – Ansa211