pre-commit-Framework¶
pre-commit ist ein Framework zum Verwalten und Pflegen mehrsprachiger Commit-Hooks.
Eine wesentliche Aufgabe ist es, dem gesamten Entwicklungsteam dieselben Skripte zur Verfügung zu stellen. pre-commit von yelp verwaltet solche Hooks und verteilt sie auf verschiedene Projekte und Entwickler.
Git Hooks werden meist verwendet um vor Code Reviews automatisch auf Probleme im
Code hinzuweisen, z.B. um die Formatierung zu überprüfen
oder Debug-Anweisungen zu finden. pre-commit vereinfacht das
projektübergreifende Teilen vom Hooks. Dabei ist auch die Sprache, in der
z.B. ein Linter geschrieben wurde, wegabstrahiert –
so ist scss-lint
in Ruby geschrieben, ihr könnt ihn jedoch mit pre-commit
verwenden ohne eurem Projekt ein Gemfile hinzufügen zu müssen.
Installation¶
Bevor ihr die Hooks ausführen könnt, muss das pre-commit Framework installiert werden:
Bevor das pre-commit Framework mit Pipenv installiert werden kann, müssen zunächst noch die Microsoft Build Tools für C++ heruntergeladen und ausgeführt werden damit anschließend die Desktopentwicklung mit C++ ausgewählt und mit den Standardoptionen installiert werden kann.
Erst dann kann das pre-commit Framework installiert werden mit:
$ uv add pre-commit
$ apt install pre-commit
$ brew install pre-commit
$ uv add pre-commit
Überprüfen der Installation z.B. mit
$ uv run pre-commit -V
pre-commit 2.21.0
Konfiguration¶
Nachdem Pre-Commit installiert ist, können mit der
.pre-commit-config.yaml
-Datei im Root-Verzeichnis eures Projekts Plugins für
dieses Projekt konfiguriert werden.
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
Ihr könnt euch eine solche initiale .pre-commit-config.yaml
-Datei auch
generieren lassen mit
$ uv run pre-commit sample-config > .pre-commit-config.yaml
Wenn ihr check-json
auf eure Jupyter Notebooks anwenden möchtet, müsst ihr
zunächst konfigurieren, dass die Überprüfung auch für den Datei-Suffix
.ipynb
verwendet werden soll:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
…
- id: check-json
types: [file]
files: \.(json|ipynb)$
Siehe auch
Eine vollständige Liste der Konfigurationsoptionen erhaltet ihr in Adding pre-commit plugins to your project.
Ihr könnt auch eigene Hooks schreiben, siehe Creating new hooks.
Installieren der Git-Hook-Skripte¶
Damit Pre-Commit auch vor jedem Commit zuverlässig ausgeführt wird, wird das Skript in unserem Projekt installiert:
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
Wollt ihr die Git-Hook-Skripte wieder deinstallieren, könnt ihr dies mit
pre-commit uninstall
.
Ausführen¶
pre-commit run --all-files
führt alle pre-commit-Hooks unabhängig von
git commit
aus:$ uv run pre-commit run --all-files Trim Trailing Whitespace.................................................Passed Fix End of Files.........................................................Passed Check Yaml...............................................................Passed Check for added large files..............................................Passed
pre-commit run HOOK
führt einzelne pre-commit-Hooks aus, z.B.
pre-commit run trailing-whitespace
Bemerkung
Beim ersten Aufruf eines pre-commit-Hooks wird dieser zunächst
heruntergeladen und anschließend installiert. Dies kann einige Zeit
benötigen, z.B. wenn eine Kopie von node
erstellt
werden muss.
pre-commit autoupdate
aktualisiert die Hooks automatisch:
Siehe auch
Die vom pre-commit-Framework verwalteten Hooks jedoch nicht darauf beschränkt, vor Commits ausgeführt zu werden; sie können auch für andere Git-Hooks verwendet werden, siehe Weitere pre-commit-Hooks.
pre-commit-uv
¶
Alternativ könnt ihr auch pre-commit-uv verwenden um mit uv virtuelle Umgebungen zu erstellen und Pakete für Pre-Commit zu installieren.
pre-commit-uv
könnt ihr installieren mit:
uv tool install pre-commit --with pre-commit-uv --force-reinstall
Anschließend könnt ihr pre-commit-uv
anstelle von pre-commit
aufrufen.