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:

  1. Hooks del lado del cliente: Se ejecutan en operaciones locales como commits y merges.
  2. 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:

cd path/to/your/repo/.git/hooks

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:

touch pre-commit
chmod +x 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:

git commit -m "Test commit"

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:

#!/bin/sh

echo "Merge completado. No olvides revisar los cambios."

Ejercicio Práctico

Ejercicio 1: Crear un Hook pre-commit para Verificar Formato de Código

  1. Navega al directorio de hooks de tu repositorio:

    cd path/to/your/repo/.git/hooks
    
  2. Crea un archivo pre-commit y hazlo ejecutable:

    touch pre-commit
    chmod +x pre-commit
    
  3. Escribe un script en pre-commit que verifique el formato de los archivos JavaScript usando eslint:

    #!/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
    
  4. 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

Módulo 3: Ramas y Fusión

Módulo 4: Trabajando con Repositorios Remotos

Módulo 5: Operaciones Avanzadas de Git

Módulo 6: Herramientas y Técnicas de Git

Módulo 7: Estrategias de Colaboración y Flujo de Trabajo

Módulo 8: Mejores Prácticas y Consejos de Git

Módulo 9: Solución de Problemas y Depuración

Módulo 10: Git en el Mundo Real

© Copyright 2024. Todos los derechos reservados