Git y Github
Automatización con Git hooks
En este módulo, exploraremos los Git hooks, que son scripts que Git ejecuta automáticamente en respuesta a ciertos eventos del repositorio. Los hooks son extremadamente útiles para automatizar tareas como la verificación de código, la ejecución de pruebas, y el despliegue continuo.
¿Qué son los Git hooks?
Los Git hooks son scripts que Git ejecuta automáticamente antes o después de eventos importantes, como commits, pushes y merges. Existen dos tipos principales de hooks:
- Hooks del lado del cliente: Afectan operaciones locales como commits y merges.
- Hooks del lado del servidor: Se ejecutan en clave servidor durante operaciones de red como recibir pushes.
Ubicación de los hooks
Los hooks se encuentran en el directorio .git/hooks
de tu repositorio. Cada hook es un archivo de script (normalmente Shell, Python, Ruby, etc.) y deben ser ejecutables para que Git los ejecute.
Hooks del lado del cliente
Pre-commit
Se ejecuta antes de que se realice un commit. Puedes usarlo para validar el mensaje del commit, verificar el estilo de código o ejecutar pruebas.
Ejemplo de pre-commit
que evita commits con mensajes vacíos:
sh
- Crea un archivo llamado
pre-commit
en el directorio.git/hooks
. - Añade el código anterior.
- Haz que el script sea ejecutable:
bash
Commit-msg
Se ejecuta después de que el mensaje del commit se introduce, pero antes de que el commit se complete. Se puede usar para validar el formato del mensaje del commit.
Ejemplo de commit-msg
que valida que el mensaje del commit no esté vacío:
sh
- Crea un archivo llamado
commit-msg
en el directorio.git/hooks
. - Añade el código anterior.
- Haz que el script sea ejecutable:
bash
Hooks del lado del servidor
Pre-receive
Se ejecuta en el servidor antes de aceptar un push. Útil para validar cambios antes de aceptarlos en el repositorio remoto.
Ejemplo básico de pre-receive
:
sh
- En el servidor, crea un archivo llamado
pre-receive
en el directoriohooks
de tu repositorio remoto. - Añade el código anterior.
- Haz que el script sea ejecutable:
bash
Post-receive
Se ejecuta después de que los cambios han sido aceptados en el servidor. Útil para despliegue continuo o notificaciones.
Ejemplo de post-receive
que despliega el código a un servidor web:
sh
- En el servidor, crea un archivo llamado
post-receive
en el directoriohooks
de tu repositorio remoto. - Añade el código anterior.
- Haz que el script sea ejecutable:
bash
Ejemplos prácticos
Hook de pre-commit que verifica el estilo de código con eslint
- Primero, instala
eslint
en tu proyecto:bash - Crea el archivo
pre-commit
en.git/hooks
:sh - Haz que el script sea ejecutable:
bash
Hook de post-receive para enviar notificaciones por Slack
- Configura el webhook de Slack.
- Crea el archivo
post-receive
enhooks
del repositorio remoto:sh - Haz que el script sea ejecutable:
bash
Buenas prácticas
- Mantén los hooks versionados: Guarda tus scripts de hooks en el repositorio (por ejemplo, en una carpeta
.githooks
) para que todos los colaboradores puedan acceder a ellos. - Documenta tus hooks: Proporciona instrucciones claras sobre cómo instalar y usar los hooks.
- Pruebas en hooks: Asegúrate de que los scripts en los hooks no introduzcan fallos en tu flujo de trabajo.
Configurar hooks a través de core.hooksPath
Puedes configurar un directorio personalizado para los hooks:
- Crea una carpeta para almacenar tus hooks (ejemplo:
.githooks
). - Mueve tus scripts de hooks a esta carpeta.
- Configura
core.hooksPath
para usar esta carpeta:bash
Con estas técnicas y ejemplos, puedes comenzar a automatizar tareas repetitivas e integrar diferentes herramientas en tu flujo de trabajo de desarrollo usando Git hooks. En el próximo módulo, aprenderemos sobre la integración continua con GitHub Actions.
- Introducción a Git y GitHub
- Instalación y configuración de Git
- Fundamentos de control de versiones
- Creación y clonación de repositorios
- Realización de commits y seguimiento de cambios
- Gestión de ramas (branching)
- Fusionado de ramas (merging)
- Resolución de conflictos
- Trabajo colaborativo en GitHub
- Pull requests y revisiones de código
- Uso avanzado de Git (rebase, cherry-pick, etc.)
- Automatización con Git hooks
- Integración continua con GitHub Actions
- Gestión de versiones y lanzamiento de releases
- Conclusiones y mejores prácticas en Git y GitHub
