Por Anónimo (no verificado) , 29 Abril 2026

Después del hecho

Donde los hooks de tiempo de commit dan forma a los commits, los hooks de esta página reaccionan a ellos. post-commit se ejecuta localmente tras cada commit, pre-push se ejecuta antes de transferir objetos a un remote, y post-receive se ejecuta en el servidor tras aterrizar un push.

post-commit

No puede bloquear — se ejecuta tras registrarse el commit. Útil para notificaciones, regeneración de ctags, o lanzar tareas en background.

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

pre-push

#!/usr/bin/env bash
# .git/hooks/pre-push
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 "Los tests fallan; rechazando push a main."
  exit 1
fi
  fi
done

post-receive (lado servidor)

Se ejecuta en el remote tras completarse un push. Usos comunes: desplegar un sitio estático, lanzar CI, enviar notificaciones de chat, mirror a otro remote.

#!/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 "Desplegado $newrev a producción"
  fi
done

Otros hooks de servidor

pre-receive se ejecuta una vez por push y puede rechazar todo el push. update se ejecuta una vez por ref y puede rechazar refs individuales.

Encadenamiento de hooks

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

Errores comunes

post-commit no puede prevenir un commit; no pongas validación allí. pre-push se ejecuta solo cuando push es invocado manualmente.

Depuración

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