Skip to content

Git Hooks et Automatisation

Définition

Scripts déclenchés sur événements Git pour appliquer politiques et tâches répétitives.

Emplacement

.git/hooks/

Hooks Locaux Clés

HookMomentUsage
pre-commitAvant création commitLint, format rapide
commit-msgAprès messageValider format
pre-pushAvant pushTests, build
prepare-commit-msgAvant éditionPré-remplissage

Exemple pre-commit

bash
#!/usr/bin/env bash
set -e
npm run lint
npm run test:quick

chmod +x .git/hooks/pre-commit

commit-msg Format Conventionnel

bash
#!/usr/bin/env bash
msgFile=$1
pattern='^(feat|fix|refactor|docs|test|chore)(\(.+\))?: '
if ! grep -Eq "$pattern" "$msgFile"; then
  echo "Format invalide: feat(scope): résumé" >&2
  exit 1
fi

Bypass (rare)

bash
git commit --no-verify

Versionner Hooks

bash
mkdir .githooks
git config core.hooksPath .githooks

pre-push Exemple

bash
#!/usr/bin/env bash
set -e
npm test -- --bail

Serveur (Exemples)

HookRôle
pre-receiveBloquer commits non conformes
updateValidation par branche
post-receiveDéploiement / notifications

Outils (Husky)

bash
npm i -D husky
npx husky install
npx husky add .husky/pre-commit "npm run lint"

Hooks vs CI

AspectHooksCI
LatenceInstantMinutes
PortéeLocaleCentrale
FiabilitéVariableUniforme

Bonnes Pratiques

  • Rapides (<2s)
  • Messages d'erreur clairs
  • Pas de secret dur-codé

Dépannage

ProblèmeCorrection
Ne s'exécute pasPermissions + shebang
LentProfil + cache
Fausse alerteAjuster règles

Exemple Bloquer Push direct main

bash
#!/usr/bin/env bash
branch=$(git symbolic-ref --short HEAD)
if [ "$branch" = "main" ]; then
  echo "Push direct sur main interdit." >&2
  exit 1
fi

Résumé

Hooks = garde-fous locaux; CI complète. Utiliser légers, partagés, cohérents.