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.
# 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:
# Î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. |