prek

prek ist eine in Rust geschriebene Variante von pre-commit 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 prek installiert werden:

> powershell -ExecutionPolicy ByPass -c "irm https://github.com/j178/prek/releases/download/v0.4.9/prek-installer.ps1 | iex"
$ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.4.9/prek-installer.sh | sh
$ brew install prek
$ uv add --group dev prek

Überprüfen der Installation z.B. mit

$ uv run prek -V
prek 0.4.9 (42b79a57f 2026-07-11)

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: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # v6.0.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 prek 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: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # v6.0.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:

$ prek install
prek installed at .git/hooks/pre-commit

Wollt ihr die Git-Hook-Skripte wieder deinstallieren, könnt ihr dies mit prek uninstall.

Ausführen

uv run prek run --all-files

führt alle prek-Checks unabhängig von git commit aus:

$ uv run prek run --all-files
Trim Trailing Whitespace.................................................Passed
Fix End of Files.........................................................Passed
Check Yaml...............................................................Passed
Check for added large files..............................................Passed
uv run prek run HOOK

führt einzelne prek-Checks aus, z. B. prek run trailing-whitespace

Bemerkung

Beim ersten Aufruf eines prek-Checks 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.

prek update [OPTIONS]

aktualisiert die Hooks automatisch, z. B.:

$ uv run prek update --freeze --cooldown-days 7
https://github.com/pre-commit/pre-commit-hooks
  updating rev `v6.0.0` -> `3e8a8703264a2f4a69428a0aa4dcb512790b2c8c` (frozen: v6.0.0)

Die von prek verwalteten Hooks sind jedoch nicht darauf beschränkt, vor Commits ausgeführt zu werden; sie können auch für andere Git-Hooks verwendet werden, siehe Unterstützte Git-Hooks.