Automatizarea Verificărilor cu Git Hooks (pre-commit, commit-msg) în Git

Ghid complet pentru Git Hooks: rularea automată a linterelor și a testelor înainte de commit (pre-commit), validarea mesajelor convenționale și partajarea hook-urilor prin core.hooksPath.

Sintaxă comandă
git config core.hooksPath .githooks | .git/hooks/pre-commit | .git/hooks/commit-msg

Git Hooks sunt scripturi declanșate automat de Git la momente-cheie din ciclul de viață al depozitului (înainte de a comite cod, la generarea mesajului de commit sau înainte de a trimite modificările pe serverul remote prin push). Folosirea hook-urilor garantează că în depozit nu ajung erori de sintaxă, secrete comise accidental sau mesaje de commit neconforme.

1. Crearea unui hook ‘pre-commit’ pentru verificarea codului
# Fișierele hook se află în mod implicit în directorul '.git/hooks/'.
# Creăm scriptul executabil '.git/hooks/pre-commit':

#!/bin/sh
echo "[Pre-Commit] Rulare verificare linter și formatare..."

# Verificăm dacă fișierele modificate trec testul de linting:
npm run lint --silent
EXIT_CODE=$?

if [ $EXIT_CODE -ne 0 ]; then
    echo "EROARE: Codul nu respectă standardele de calitate! Commit-ul a fost BLOCAT."
    exit 1 # Dacă scriptul returnează un cod != 0, Git anulează commit-ul!
fi

echo "[Pre-Commit] Verificare reușită! Salvare commit..."
exit 0

Partajarea Hook-urilor în Echipă prin core.hooksPath

Folderul .git/hooks/ este local și nu se sincronizează prin git push pe remote. Pentru a forța întreaga echipă să folosească aceleași hook-uri, versiuneați scripturile într-un folder normal din proiect (de exemplu .githooks/) și setați configurarea:

Activarea folderului de hook-uri partajat
# În rădăcina proiectului:
mkdir .githooks
git config core.hooksPath .githooks

# Acum orice script executabil din '.githooks/' va fi apelat automat de Git!

Principalele Tipuri de Hooks Client-Side

Nume Hook Când se Declanșează Caz de Utilizare Tipic
pre-commit Imediat după rularea git commit, înainte de introducerea mesajului. Lintere (Ruff, ESLint), scanere de secrete (detect-secrets, TruffleHog), formatare automată.
commit-msg După introducerea mesajului de commit, înainte de salvarea finală. Validarea formatului Conventional Commits (ex: feat: ..., fix: ...) și adăugarea automată a ID-ului de Jira.
pre-push În timpul comenzii git push, înainte de transferul pe server. Rularea suitei complete de teste unitare și de integrare pentru a preveni spargerea pipeline-ului CI.