Unterstützte Git-Hooks¶
Die vom pre-commit-Framework verwalteten Hooks beschränken sich nicht darauf, vor Commits ausgeführt zu werden; sie können auch für andere Git-Hooks verwendet werden:
commit-msgcommit-msg kann verwendet werden mit:
$ pre-commit install --hook-type commit-msg pre-commit installed at .git/hooks/commit-msg
Der
commit-msg-Hook kann mitstages: [commit-msg]konfiguriert werden, wobei der Name einer Datei übergeben wird, die den aktuellen Inhalt der Commit-Nachricht enthält, der überprüft werden kann.
post-checkoutDer post-checkout-Hook wird aufgerufen, wenn
git checkoutodergit switchausgeführt wird.Der
post-checkout-Hook kann z.B. verwendet werden fürdie Überprüfung von Repositories
die Ansicht der Unterschiede zum vorherigen
HEADdas Ändern der Metadaten des Arbeitsverzeichnisses.
In pre-commit kann kann er verwendet werden mit:
$ pre-commit install --hook-type post-checkout pre-commit installed at .git/hooks/post-checkout
Da
post-checkoutnicht auf Dateien wirkt, muss für allepost-checkout-Skriptealways_rungesetzt werden, z.B.:- repo: local hooks: - id: post-checkout-local name: Post checkout always_run: true stages: [post-checkout] # …
Dabei gibt es drei Umgebungsvariablen, die den drei Arguementen von
post-checkoutentsprechen:$PRE_COMMIT_FROM_REFgibt die Referenz des vorherigen
HEADaus$PRE_COMMIT_TO_REFgibt die Referenz des neuen
HEADaus, der sich geändert haben kann oder auch nicht$PRE_COMMIT_CHECKOUT_TYPEgibt
Flag=1aus, wenn es ein Branch-Checkout war undFlag=0, wenn es ein File-Checkout war.
post-commitAb Version 2.4.0 kann das Framework auch post-commit-Hooks ausführen mit:
Da
post-commitjedoch nicht auf Dateien wirkt, müssen all diese Hooksalways_runsetzen:- repo: local hooks: - id: post-commit-local name: post commit always_run: true stages: [post-commit] # …
post-mergeAb Version 2.11.0 kann das Framework auch Skripte für den post-merge-Hook ausführen:
$ uv run pre-commit install --hook-type post-merge pre-commit installed at .git/hooks/post-merge
Mit
$PRE_COMMIT_IS_SQUASH_MERGEkönnt ihr herausfinden, ob es sich um einen Squash-Merge handelte.
post-rewritepost-rewrite wird aufgerufen, wenn Commits umgeschrieben werden, also von
git commit --amendoder vongit rebase.$ pre-commit install --hook-type post-rewrite pre-commit installed at .git/hooks/post-rewrite
Da
post-rewritenicht auf Dateien wirkt, mussalways_run: truegesetzt werden.Git teilt dem
post-rewrite-Hook mit, welcher Befehl das Rewrite ausgelöst hat. pre-commit gibt dies als$PRE_COMMIT_REWRITE_COMMANDaus.
pre-merge-commitAb Git 2.24 gibt es den pre-merge-commit-Hook, der ausgelöst wird, ausgelöst, nachdem eine Zusammenführung erfolgreich war, aber bevor der Merge-Commit erstellt wird. Ihr könnt ihn mit dem pre-commit-Framework nutzen mit:
$ pre-commit install --hook-type pre-merge-commit pre-commit installed at .git/hooks/pre-merge-commit
pre-pushUm den pre-push-Hook mit dem pre-commit-Framework verwenden zu können, gebt folgendes ein:
$ pre-commit install --hook-type pre-push pre-commit installed at .git/hooks/pre-push
Hierfür werden die folgenden Umgebungsvariablen bereitgestellt:
$PRE_COMMIT_FROM_REFDie entfernte Revision, zu der gepusht wurde
$PRE_COMMIT_TO_REFDie lokale Revision, die an die entfernte Revision gepusht wurde
$PRE_COMMIT_REMOTE_NAMEDie lokale Revision, die an die entfernte Revision gepusht wurde, z.B.
origin$PRE_COMMIT_REMOTE_URLDie URL des entfernten Repository, zu dem gepusht wurde, z.B.
git@github.com:veit/python4datascience$PRE_COMMIT_REMOTE_BRANCHDer Name des entfernten Zweigs, zu dem gepusht wurde, z.B.
refs/heads/TARGET_BRANCH$PRE_COMMIT_LOCAL_BRANCHDer Name des lokalen Zweigs, der in den entfernten Zweig verschoben wurde, z.B.
HEAD
pre-rebaseSeit Version 3.2.0 unterstützt das Framework auch pre-rebase-Hooks:
$ uv run pre-commit install --hook-type pre-rebase pre-rebase installed at .git/hooks/pre-rebase
prepare-commit-msgprepare-commit-msg kann mit pre-commit verwendet werden mit:
$ pre-commit install --hook-type prepare-commit-msg pre-commit installed at .git/hooks/prepare-commit-msg
Der
prepare-commit-msg-Hook wird mitstages: [prepare-commit-msg]konfiguriert, wobei der Name einer Datei übergeben wird, die die anfängliche Commit-Nachricht enthält, z.B. vongit commit -m "COMMIT-MESSAGE"um daraus eine dynamische Vorlage zu erstellen, die im Editor angezeigt wird. Schließlich sollte der Hook noch überprüfen, ob kein Editor gestartet wird mitGIT_EDITOR=:.