Git Hooks

Git-Hooks sind Skripte, die bei bestimmten Ereignissen in einem Git-Repository automatisch ausgeführt werden, u. a.:

Sie können sich entweder in lokalen oder serverseitigen Repositories befinden und erlauben so, Git-Repositories individuell anzupassen und benutzerdefinierte Aktionen auszulösen.

Git Hooks befinden sich im Verzeichnis .git/hooks/. Beim Anlegen eines Repository werden dort auch bereits einige Beispielskripte angelegt:

.git/hooks
├── applypatch-msg.sample
├── commit-msg.sample
├── fsmonitor-watchman.sample
├── post-update.sample
├── pre-applypatch.sample
├── pre-commit.sample
├── pre-merge-commit.sample
├── pre-push.sample
├── pre-rebase.sample
├── pre-receive.sample
├── prepare-commit-msg.sample
├── push-to-checkout.sample
├── sendemail-validate.sample
└── update.sample

Damit die Skripte ausgeführt werden, muss lediglich der Suffix .sample entfernt werden und ggf. die Dateiberechtigung ausführbar sein, z.B. mit chmod +x .git/PREPARE-COMMIT-MSG.

Die integrierten Skripte sind Shell- und Perl-Skripte, es können jedoch beliebige Skriptsprachen verwenden werden. Dabei bestimmt die Shebang-Zeile (#!/bin/sh), wie die Datei interpretiert werden soll.

Die Skripte werden jedoch mit git push nicht auf den Git-Server kopiert. Um Skripte in mehreren Repositories verwenden zu können, empfiehlt sich daher das pre-commit-Framework.

Siehe auch

Konfigurationsbasierte Hooks

Added in version 2.54: Git 2.54 führt nun eine neue Möglichkeit ein, Hooks in euren Konfigurationsdateien zu definieren: Anstatt eines Skripts in .git/hooks/pre-commit abzulegen, kann nun folgendes angegeben werden:

[hook "ruff check"]
   event = pre-commit
   command = ~/bin/ruff check --fix --exit-non-zero-on-fix

Diese Konfiguration kann jedoch nicht nur für jedes Projekt angegeben werden, sondern auch global oder systemweit in ~/.gitconfig oder in /etc/gitconfig.

Mit git hook list pre-commit erfahrt ihr, welche Hooks konfiguriert sind und woher sie stammen.