Hook lato client
Gli hook sono script eseguibili in .git/hooks/ (o dove punta core.hooksPath). Git li invoca in momenti ben definiti. I tre hook al momento del commit consentono di applicare politiche prima che il commit sia finalizzato.
pre-commit
#!/usr/bin/env bash
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
prepare-commit-msg
#!/usr/bin/env bash
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
pattern='^(feat|fix|docs|refactor|test|chore)(\(.+\))?: .{1,72}'
grep -qE "$pattern" "$1" || {
echo "Commit message must follow Conventional Commits."
exit 1
}
Condividere gli hook con il team
git config core.hooksPath .githooks
Bypassare
Passare --no-verify per saltare pre-commit e commit-msg. Riservare alle emergenze.
Errori comuni
Hook lenti frustrano gli sviluppatori e vengono bypassati. Mantenerli sotto un secondo quando possibile.