Un hook es un script que Git ejecuta automáticamente en momentos determinados del flujo de trabajo. Viven en .git/hooks y, por defecto, no se transmiten al clonar (cada copia del repositorio configura los suyos).
pre-commitSe ejecuta antes de que se cree el commit, y puede cancelarlo si termina con un código de salida distinto de cero. Se usa típicamente para ejecutar linters o formateadores automáticos sobre los archivos preparados.
commit-msgRecibe la ruta a un archivo con el mensaje de commit propuesto, y puede validarlo (por ejemplo, exigir que siga un formato determinado) o incluso modificarlo.
pre-pushSe ejecuta antes de subir commits a un remoto; útil para correr una batería de pruebas rápida como última verificación.
Basta con crear un archivo ejecutable con el nombre correspondiente dentro de .git/hooks, sin extensión:
#!/bin/sh # .git/hooks/pre-commit npm run lint
Como .git/hooks no forma parte del historial versionado, los equipos que quieren compartir hooks entre todos los colaboradores suelen guardar los scripts en un directorio normal dentro del repositorio (por ejemplo scripts/hooks/) y configurar Git para que los use:
git config core.hooksPath scripts/hooks
De esta forma los hooks sí quedan versionados junto con el resto del proyecto.