Mit Pre-Commit-Hooks 3-fache Sicherheit
Beim Arbeiten mit Git kann es schnell passieren, dass fehlerhafter oder unsauberer Code in ein Repository gelangt. Um dies zu verhindern, können Pre-Commit-Hooks eingesetzt werden, die den Code automatisch vor jedem Commit prüfen.
In diesem Artikel zeige ich, wie du einen Pre-Commit-Hook einrichtest, der deine gestagten PHP-Dateien mit drei wichtigen Tools analysiert:
- PHPStan – Findet potenzielle Fehler und sorgt für statische Code-Analyse.
- PHPMD (PHP Mess Detector) – Hilft dabei, unsaubere Codestellen und Verstöße gegen Clean-Code-Prinzipien zu erkennen.
- PHPCS (PHP CodeSniffer) – Stellt sicher, dass der Code den Coding-Standards entspricht (z. B. PSR-12).
Mit diesem Setup erhöhst du die Code-Qualität und verhinderst frühzeitig Fehler.
Installation der Tools
Die genannten Tools können über Composer als Entwicklungsabhängigkeiten installiert werden:
composer require --dev phpstan/phpstan
composer require --dev phpmd/phpmd
composer require --dev squizlabs/php_codesniffer
Dadurch stehen sie unter vendor/bin/ zur Verfügung und können direkt in einem Pre-Commit-Hook genutzt werden.
Einrichtung des Pre-Commit-Hooks
Erstelle oder bearbeite die Datei .git/hooks/pre-commit in deinem Git-Repository und füge den folgenden Code ein:
#!/bin/sh
#
# Pre-commit Hook zur Prüfung von PHP-Dateien mit PHPStan, PHPMD und PHPCS
#
# Stelle sicher, dass dieser Hook ausführbar ist:
# chmod +x .git/hooks/pre-commit
# Finde alle gestagten PHP-Dateien (nur neue, modifizierte oder kopierte Dateien)
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.php$')
# Falls keine PHP-Dateien gestaged sind, beende den Hook erfolgreich.
if [ -z "$STAGED_FILES" ]; then
exit 0
fi
# Zeige die gestagten Dateien an
echo "Staged PHP files:"
echo "$STAGED_FILES"
echo ""
# 1. PHPStan ausführen
echo "Running PHPStan..."
vendor/bin/phpstan analyse $STAGED_FILES --level=max
if [ $? -ne 0 ]; then
echo "PHPStan checks failed. Commit aborted."
exit 1
fi
# 2. PHPMD ausführen
echo "Running PHPMD..."
vendor/bin/phpmd $STAGED_FILES text phpmd.xml
if [ $? -ne 0 ]; then
echo "PHPMD checks failed. Commit aborted."
exit 1
fi
# 3. PHPCS ausführen
echo "Running PHPCS..."
vendor/bin/phpcs --standard=PSR12 $STAGED_FILES
if [ $? -ne 0 ]; then
echo "PHPCS checks failed. Commit aborted."
exit 1
fi
echo "All checks passed!"
exit 0
Schritt-für-Schritt-Anleitung zur Aktivierung des Hooks
- Speichere den Code in der Datei
.git/hooks/pre-commitim Stammverzeichnis deines Repositories. - Mache die Datei ausführbar mit dem Befehl:
chmod +x .git/hooks/pre-commit - Teste den Hook, indem du eine PHP-Datei änderst, sie stagest (
git addausführst) und versuchst, sie zu committen.
Falls eine der Prüfungen fehlschlägt, wird der Commit verhindert, bis die Probleme behoben sind.
Vorteile dieses Setups
- Automatische Code-Qualitätsprüfung: Fehlerhafte Commits werden verhindert.
- Zeiteinsparung: Fehler werden früh erkannt, bevor sie ins Repository gelangen.
- Standardisierung: Der Code bleibt einheitlich und entspricht den gewünschten Konventionen.
Mit diesem Pre-Commit-Hook stellst du sicher, dass alle gestagten PHP-Dateien vor jedem Commit überprüft werden, wodurch du langfristig eine höhere Code-Qualität und weniger Fehler erreichst.
0 Kommentare