Par Anonyme (non vérifié) , 29 avril 2026

Après coup

Là où les hooks de temps de commit donnent forme aux commits, les hooks de cette page y réagissent. post-commit s'exécute localement après chaque commit, pre-push avant de transférer les objets vers un remote, et post-receive sur le serveur après l'arrivée d'un push.

post-commit

#!/usr/bin/env bash
ctags -R --languages=python -f .tags & disown
notify-send "Committed: $(git log -1 --format=%s)"

pre-push

#!/usr/bin/env bash
remote="$1"
url="$2"
while read local_ref local_sha remote_ref remote_sha; do
  if [ "$remote_ref" = "refs/heads/main" ]; then
if ! cargo test --quiet; then
  echo "Les tests échouent ; refus de push vers main."
  exit 1
fi
  fi
done

post-receive (côté serveur)

#!/usr/bin/env bash
while read oldrev newrev refname; do
  branch=${refname#refs/heads/}
  if [ "$branch" = "main" ]; then
GIT_WORK_TREE=/var/www/site git checkout -f main
curl -X POST https://chat.example/notify \
  -d "Déployé $newrev en production"
  fi
done

Autres hooks serveur

pre-receive s'exécute une fois par push et peut rejeter tout le push. update s'exécute une fois par ref et peut rejeter des refs individuelles.

Chaînage de hooks

#!/usr/bin/env bash
for hook in .githooks/post-commit.d/*; do
  [ -x "$hook" ] && "$hook" "$@" || exit $?
done

Erreurs courantes

post-commit ne peut pas empêcher un commit ; n'y mettez pas de validation. pre-push ne s'exécute que quand push est invoqué manuellement.

Débogage

exec >> /tmp/git-hook.log 2>&1
set -x