Cómo probar los ganchos de git

3 minutos de lectura

Dado que “probar” es un uso común para un gancho de Git, es difícil buscar mi pregunta.

Estoy escribiendo un gancho posterior a la recepción de git bastante complicado y quiero saber cuál es la mejor manera de probarlo. Actualmente mi proceso es:

  • realizar cambios en la recepción posterior en un repositorio “remoto” ficticio
  • hacer un cambio en un repositorio local ficticio
  • confirmar el cambio en el repositorio local ficticio
  • empujar cambio a repositorio remoto ficticio

¿Hay alguna manera más fácil de probar esto? Idealmente se vería como:

  • realizar cambios para posrecibir en un repositorio ficticio
  • emita el comando “mágico” para probar la recepción posterior

¿Quizás pueda “reeditar” un impulso anterior o hacer que el repositorio remoto actúe como si acabara de recibir un impulso con un hash específico?

Escriba un enlace que solo registre sus argumentos/entorno y los descargue en un archivo. Luego, puede volver a invocar el gancho real cuando lo desee con el mismo entorno/argumentos y actuará como si acabara de volver a emitir exactamente el mismo impulso.

  • Eso es más o menos lo que hice, pero en lugar de eso, inspeccioné manualmente (haciendo eco) las variables relevantes.

    – Error

    17 de julio de 2012 a las 0:25

  • ¿Cómo se vería un gancho tan “volquete”?

    –Jon Watson

    11 de noviembre de 2015 a las 22:28

  • @JonWatson, acabo de usar echo $@;echo; pwd; echo; set

    – Lucas

    28 de enero de 2016 a las 17:41


  • Esto puede ser obvio para algunos, pero asegúrese de que su secuencia de comandos de enlace sea ejecutable! Creé el mío en un editor de texto, en lugar de copiar el .sample, y no se ejecutó.

    – mcg256

    10 de enero de 2019 a las 0:13

avatar de usuario
BMW

Responde a esta pregunta de cuatro años.

Si desea probar el gancho, primero debe probar en el entorno local, doy los comandos detallados para el seguimiento, use post-receive como muestra:

$ mkdir /tmp/hook_test
$ cd /tmp/hook_test

# set local git repo, where you put hooks in it.
$ git clone --bare https://github.com/git/git.git

# set develop environment which is cloned from the new created repo. 
$ git clone git.git repo 
    
# copy and rename the hook you need test to "post-receive"
$ cd git.git/hooks
$ cp ~/post-receive-test post-receive

# suppose the hook script is bash script.
# edit "post-receive" and add "set -x" to second line in it to active debug

$ cd /tmp/hook_test/repo
# emulate a hook trigger, do some changes, "git add" and "git commit" it 

$ git push
 
# Now you should see the script "post-receive" runs automatically with debug details.

Deberías ser libre de correr git pushque las actualizaciones solo se envían al repositorio local /tmp/hook_test/git.git

Mi enfoque es marcar el HEAD en el repositorio remoto hacia atrás una confirmación, y luego presionar nuevamente:

ssh <repo> 'cd /<repo_path>; git update-ref refs/heads/master HEAD^' && git push origin master

  • Perfecto, justo lo que necesitaba.

    – robercord

    09/01/2019 a las 16:50

Para la depuración, también podría terminar su gancho en algo como esto:

echo "No errors found."
exit 1

Si está satisfecho con su gancho, por supuesto, saque la última línea nuevamente.

¿Ha sido útil esta solución?