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

Hooks del lado cliente

Los hooks son scripts ejecutables en .git/hooks/ (o donde apunte core.hooksPath). Git los invoca en momentos bien definidos. Los tres hooks de tiempo de commit te permiten aplicar políticas antes de que un commit sea finalizado.

pre-commit

Se ejecuta antes de que se componga el mensaje del commit. Devuelve no-cero para abortar. Usos típicos: linting, formato, escaneo de secretos, ejecutar tests rápidos.

#!/usr/bin/env bash
# .git/hooks/pre-commit
set -e
files=$(git diff --cached --name-only --diff-filter=ACMR | grep '\.py$' || true)
[ -z "$files" ] && exit 0
ruff check $files
ruff format --check $files

Hazlo ejecutable: chmod +x .git/hooks/pre-commit.

prepare-commit-msg

Se ejecuta tras generar el mensaje por defecto y antes de abrirse el editor. Útil para anteponer números de ticket extraídos del nombre de la rama.

#!/usr/bin/env bash
# .git/hooks/prepare-commit-msg
MSG_FILE=$1
SOURCE=$2
[ "$SOURCE" = "message" ] && exit 0
branch=$(git symbolic-ref --short HEAD)
ticket=$(echo "$branch" | grep -oE '[A-Z]+-[0-9]+' || true)
[ -n "$ticket" ] && sed -i.bak "1s/^/[$ticket] /" "$MSG_FILE"

commit-msg

#!/usr/bin/env bash
# .git/hooks/commit-msg
pattern='^(feat|fix|docs|refactor|test|chore)(\(.+\))?: .{1,72}'
grep -qE "$pattern" "$1" || {
  echo "El mensaje del commit debe seguir Conventional Commits."
  exit 1
}

Compartir hooks con el equipo

git config core.hooksPath .githooks

O usa un gestor como pre-commit (Python), lefthook, o husky (JS).

Saltarse

Pasa --no-verify para saltar los hooks pre-commit y commit-msg. Reserva esto para emergencias.

Errores comunes

Hooks lentos frustran a los desarrolladores y se saltan. Mantenlos por debajo de un segundo cuando sea posible. Olvidar el bit ejecutable en checkouts de Windows rompe la ejecución del hook.