Introducción a los Git Hooks
Los Git Hooks son scripts que Git ejecuta automáticamente antes o después de ciertos eventos, como commits, pushes y merges. Estos scripts permiten automatizar tareas y personalizar el flujo de trabajo de Git.
Tipos de Hooks
Existen dos tipos principales de hooks en Git:
- Hooks del lado del cliente: Se ejecutan en operaciones locales como commits y merges.
- Hooks del lado del servidor: Se ejecutan en operaciones de red como recibir pushes.
Ubicación de los Hooks
Los hooks se encuentran en el directorio .git/hooks
de cada repositorio. Git proporciona ejemplos de scripts de hooks con la extensión .sample
.
Configuración de Git Hooks
Paso 1: Navegar al Directorio de Hooks
Primero, navega al directorio de hooks de tu repositorio:
Paso 2: Crear o Modificar un Hook
Puedes crear un nuevo script de hook o modificar uno existente. Por ejemplo, para crear un hook pre-commit
:
Paso 3: Escribir el Script del Hook
Abre el archivo pre-commit
en tu editor de texto favorito y escribe el script. Aquí hay un ejemplo de un hook pre-commit
que previene commits si hay archivos con errores de sintaxis en Python:
#!/bin/sh # Verificar errores de sintaxis en archivos Python for file in $(git diff --cached --name-only | grep '\.py$'); do python -m py_compile $file if [ $? -ne 0 ]; then echo "Error de sintaxis en $file" exit 1 fi done
Paso 4: Probar el Hook
Intenta hacer un commit para ver si el hook se ejecuta correctamente:
Si hay errores de sintaxis en los archivos Python, el commit será prevenido y se mostrará un mensaje de error.
Ejemplos de Hooks Comunes
Hook pre-commit
El hook pre-commit
se ejecuta antes de que se realice un commit. Es útil para verificar la calidad del código, ejecutar pruebas, o formatear el código automáticamente.
Ejemplo: Verificar que los mensajes de commit no estén vacíos:
#!/bin/sh if [ -z "$(git log -1 --pretty=%B)" ]; then echo "El mensaje de commit no puede estar vacío" exit 1 fi
Hook pre-push
El hook pre-push
se ejecuta antes de que los cambios sean empujados a un repositorio remoto. Es útil para ejecutar pruebas o verificar que el código cumple con ciertos estándares antes de compartirlo.
Ejemplo: Ejecutar pruebas antes de empujar cambios:
#!/bin/sh # Ejecutar pruebas npm test if [ $? -ne 0 ]; then echo "Las pruebas han fallado. No se puede empujar los cambios." exit 1 fi
Hook post-merge
El hook post-merge
se ejecuta después de que se ha completado una operación de merge. Es útil para realizar tareas de limpieza o notificar a los desarrolladores sobre el merge.
Ejemplo: Notificar a los desarrolladores sobre un merge:
Ejercicio Práctico
Ejercicio 1: Crear un Hook pre-commit
para Verificar Formato de Código
-
Navega al directorio de hooks de tu repositorio:
cd path/to/your/repo/.git/hooks
-
Crea un archivo
pre-commit
y hazlo ejecutable:touch pre-commit chmod +x pre-commit
-
Escribe un script en
pre-commit
que verifique el formato de los archivos JavaScript usandoeslint
:#!/bin/sh # Verificar formato de archivos JavaScript for file in $(git diff --cached --name-only | grep '\.js$'); do eslint $file if [ $? -ne 0 ]; then echo "Error de formato en $file" exit 1 fi done
-
Intenta hacer un commit con un archivo JavaScript mal formateado y verifica que el hook previene el commit.
Solución
El script pre-commit
debería prevenir el commit si eslint
encuentra errores de formato en los archivos JavaScript. Si el archivo está bien formateado, el commit se realizará con éxito.
Conclusión
Los Git Hooks son una herramienta poderosa para automatizar y personalizar el flujo de trabajo de Git. Pueden ayudar a mantener la calidad del código, asegurar que se sigan las mejores prácticas y facilitar la colaboración en equipo. Al dominar los hooks, puedes mejorar significativamente tu eficiencia y la de tu equipo en el uso de Git.
Dominando Git: De Principiante a Avanzado
Módulo 1: Introducción a Git
Módulo 2: Operaciones Básicas de Git
- Creando un Repositorio
- Clonando un Repositorio
- Flujo de Trabajo Básico de Git
- Preparando y Confirmando Cambios
- Visualizando el Historial de Confirmaciones
Módulo 3: Ramas y Fusión
- Entendiendo las Ramas
- Creando y Cambiando Ramas
- Fusionando Ramas
- Resolviendo Conflictos de Fusión
- Gestión de Ramas
Módulo 4: Trabajando con Repositorios Remotos
- Entendiendo los Repositorios Remotos
- Añadiendo un Repositorio Remoto
- Obteniendo y Extrayendo Cambios
- Empujando Cambios
- Rastreando Ramas
Módulo 5: Operaciones Avanzadas de Git
- Rebasing
- Cherry-Picking de Confirmaciones
- Guardando Cambios
- Etiquetando Confirmaciones
- Revirtiendo Confirmaciones
Módulo 6: Herramientas y Técnicas de Git
Módulo 7: Estrategias de Colaboración y Flujo de Trabajo
- Forking y Pull Requests
- Revisiones de Código con Git
- Flujo de Trabajo Git Flow
- GitHub Flow
- Integración Continua con Git
Módulo 8: Mejores Prácticas y Consejos de Git
- Escribiendo Buenos Mensajes de Confirmación
- Manteniendo un Historial Limpio
- Ignorando Archivos con .gitignore
- Mejores Prácticas de Seguridad
- Consejos de Rendimiento
Módulo 9: Solución de Problemas y Depuración
- Problemas Comunes de Git
- Deshaciendo Cambios
- Recuperando Confirmaciones Perdidas
- Tratando con Repositorios Corruptos
- Técnicas Avanzadas de Depuración