Saltar al contenido

Como desarrolladores de Laravel, mantener un código limpio y bien formateado es esencial. Laravel Pint nos facilita esta tarea, pero ¿y si pudiéramos automatizar completamente el proceso? Los Git Hooks pre-commit son la respuesta.

En este artículo te enseñaré exactamente cómo configurar un hook pre-commit que ejecute Laravel Pint automáticamente cada vez que hagas un commit, asegurando que tu código siempre cumpla con los estándares de formato definidos.

¿Por qué automatizar Laravel Pint con Git Hooks?

  • Consistencia garantizada: Todo tu código seguirá automáticamente el mismo estilo.

  • Sin commits de formato: Se acabaron los commits cuyo único propósito es corregir el formato.

  • Ahorro de tiempo: No más revisiones manuales o ejecuciones repetitivas de Pint.

  • Historial de Git más limpio: Te centras en los cambios funcionales, no en el estilo.

Pasos para configurar Git Hooks pre-commit

1. Requisitos previos

Antes de empezar, asegúrate de tener:

  • Un proyecto Laravel

  • Git instalado

  • Laravel Pint instalado (composer require laravel/pint --dev)

Si quieres conocer más sobre Laravel Pint y sus capacidades, puedes revisar mi artículo detallado sobre Laravel Pint.

2. Crear el directorio para los Hooks personalizados

mkdir -p .git-hooks

3. Crear el script pre-commit

touch .git-hooks/pre-commit 
chmod +x .git-hooks/pre-commit

¡Importante! El comando chmod +x es crucial. Sin él, Git ignorará el hook y verás un mensaje como:

hint: The '.git-hooks/pre-commit' hook was ignored because it's not set as executable.

4. Editar el script pre-commit

Abre el archivo .git-hooks/pre-commit y añade este código:

#!/bin/sh

# Obtener los archivos PHP modificados que están staged
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".php$")

# Si no hay archivos PHP modificados, salir con éxito
if [ "$STAGED_FILES" = "" ]; then
    echo "✅ No hay archivos PHP modificados"
    exit 0
fi

echo "🔍 Aplicando Laravel Pint a los archivos modificados..."

# Ejecutar Laravel Pint solo en los archivos PHP staged
./vendor/bin/pint $STAGED_FILES

# Si Pint funcionó correctamente, agregar los cambios
if [ $? -eq 0 ]; then
    echo "✅ Formato aplicado correctamente"
    git add $STAGED_FILES
    exit 0
else
    echo "❌ Laravel Pint encontró errores que no pudo corregir"
    exit 1
fi

Para usuarios de Laravel Sail

Si utilizas Laravel Sail, reemplaza la línea que ejecuta Pint con:

./vendor/bin/sail pint $STAGED_FILES

Nota: Si usas Sail, asegúrate de que Docker esté en ejecución cuando hagas commits.

5. Configurar Git para usar los hooks personalizados

git config core.hooksPath .git-hooks

Para compartir esta configuración con tu equipo, puedes crear un script de configuración:

echo "git config core.hooksPath .git-hooks" > .git-setup
chmod +x .git-setup

Y añadir una nota en el README para que los nuevos desarrolladores ejecuten .git-setup después de clonar.

Probando nuestro Hook Pre-commit

  1. Modifica algún archivo PHP con errores de formato

  2. Añade el archivo: git add ruta/al/archivo.php

  3. Haz un commit: git commit -m "Prueba de hook"

Deberías ver algo como:

🔍 Aplicando Laravel Pint a los archivos modificados...
✅ Formato aplicado correctamente
[main abc123] Prueba de hook
 1 file changed, 5 insertions(+), 2 deletions(-)

Solución de problemas comunes

El hook no se ejecuta

  1. Verifica los permisos:

    ls -la .git-hooks/pre-commit  # Debe mostrar -rwxr-xr-x
    chmod +x .git-hooks/pre-commit  # Si necesitas añadir permisos
  2. Confirma la configuración de Git:

    git config --get core.hooksPath  # Debe mostrar .git-hooks
  3. En Windows: Asegúrate de que el archivo no tiene extensión .txt y usa terminaciones de línea LF.

Problemas con Laravel Sail

  1. Docker debe estar en ejecución antes de hacer commits.

  2. Si hay errores de permisos, ajusta los permisos dentro del contenedor o usa sudo.

Necesito saltar el hook ocasionalmente

Usa la opción --no-verify:

git commit --no-verify -m "Commit urgente sin verificar formato"

Deshacer un commit manteniendo los cambios

Si necesitas deshacer un commit sin perder tus cambios:

git reset --soft HEAD~1

Esto deshace el último commit pero mantiene todos los cambios en el staging area, permitiéndote revisar, modificar y volver a hacer commit.

Conclusión

Los Git Hooks pre-commit combinados con Laravel Pint son una herramienta poderosa para mantener la calidad y consistencia de tu código. Esta pequeña inversión inicial en la configuración te ahorrará tiempo y problemas en el futuro.

Una vez configurado, puedes olvidarte de los problemas de formato y centrarte en lo que realmente importa: desarrollar funcionalidades para tu aplicación Laravel. El formateo consistente se convierte en un proceso automático e invisible.


Recursos útiles

school Curso completo

Curso Laravel 12
Completo 2026

El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.

access_time 8 horas de contenido
layers 4 tecnologías en 1
update 100% actualizado
code Proyectos prácticos
Ver Curso Laravel 12 arrow_forward

star Incluido en cualquier suscripción

Rutas de aprendizaje