© Shutterstock / Vladislav Kudoyarov
Wie Git Hooks die lokale Entwicklung unterstützen

Ahoy, CaptainHook


Nie wieder Commits mit Messages wie „Fixed typo“ oder „Best commit ever“. Nie wieder Commits mit Syntaxfehlern oder fehlschlagenden Unit-Tests. Nie wieder Fehlermeldungen, weil Composer-Pakete nach einem Pull nicht aktualisiert wurden. Klingt zu gut, um wahr zu sein? Nicht mit der Hilfe eines Piraten!

CaptainHook ist ein Git-Hook-Manager, der die Verwaltung von Git Hooks übernimmt und um eigene Funktionen erweitert werden kann (Abb. 1). Um zu verstehen, welche Vorteile der Einsatz des Captains bringt, müssen wir erst wissen, was Git Hooks sind, wie sie funktionieren und welchen Einschränkungen sie unterliegen.

feldmann_hook_1.tif_fmt1.jpgAbb. 1: CaptainHook – die Git Hook Library für PHP-Entwickler

Git Hooks

Git Hooks sind benutzerdefinierte Anweisungen, die automatisch vor oder nach einem Git-Kommando ausgeführt werden. Das funktioniert ähnlich wie WebHooks, die man in Anwendungen hinterlegen kann, damit zu bestimmten Zeitpunkten HTTP Requests ausgeführt werden. Git Hooks können verwendet werden, um Commit Messages zu validieren oder vor einem Commit zu prüfen, ob es Syntaxfehler oder Styleguideverstöße gibt. Möchte man einen Git Hook aktivieren, muss nur ein Skript im Verzeichnis .git/hooks mit dem Namen des Hooks hinterlegt werden. In der Standardkonfiguration befinden sich in diesem Verzeichnis bereits einige Dateien mit der Dateiendung .sample, die als Hook-Vorlagen dienen.

Im Normalfall handelt es sich bei Git Hooks um Shell-Skripte, es kann aber jedes beliebige Executable verwendet werden. Ob Binary oder Skript spielt dabei keine Rolle, entscheidend ist nur der Name. Das wichtigste an Git Hooks ist, dass sie lokal sind. Sie sind nicht Teil des Repositorys, d. h. sie können nicht committet werden und lassen sich aus Sicherheitsgründen somit nicht über ein einfaches git clone installieren. Man stelle sich das Gegenteil vor: Man könne ein Skript in einem Repository hinterlegen, das, ohne nachzufragen, beim Ausführen eines Git-Kommandos mit den lokalen Benutzerrechten gestartet wird. Ja, richtig, das klingt gruselig.

Wenn ein Team gemeinsam die gleichen Git Hooks verwenden möchte, können die Skripte zwar im Repository gespeichert werden. Aber jedes Teammitglied muss diese noch selbstständig übernehmen – sei es über Symlinks oder durch das Kopieren in das lokale .git/hooks-Verzeichnis. Und genau hier kommt jetzt der Captain ins Spiel. CaptainHook ermöglicht drei Dinge: Erstens, die Konfiguration aller Git Hooks in einer JSON-Konfigurationsdatei. Zweitens, das automatische Installieren und Aktivieren der Hooks in Kombination mit Composer. Und Drittens das Verwenden von bereits enthaltenen Hooks, beziehungsweise von vorhandenen CaptainHook-Plug-ins. Aber eins nach dem anderen, starten wir mit der Installation.

CaptainHook installieren

Es gibt zwei Möglichkeiten, CaptainHook zu installieren. Die erste und empfohlene Variante ist das Verwenden einer PHAR-Datei, die entweder händisch heruntergeladen oder über PHIVE [1] installiert werden kann. Die zweite Möglichkeit ist, Composer einzusetzen und CaptainHook als DEV Dependency zu hinterlegen. Für diesen Artikel verwenden wir die zweite Variante, da es für die meisten Entwicklerinnen und Entwickler der einfachste Weg sein sollte, um den Captain auszuprobieren. Ich empfehle aber allen Lesern, die PHIVE noch nicht kennen, einen Blick darauf zu werfen. Um CaptainHook über Composer zu installieren, kann der folgenden Befehl verwendet werden:

composer require --dev captainhook/captainhook 

Nach der erfolgreichen Installation fehlen noch zwei Schritte. In Schritt eins legen wir eine captainhook.json-Konfigurationsdatei an. Die Datei kann entweder händisch erzeugt werden, indem eine Beispieldatei aus der Dokumentation kopiert wird, oder man nutzt den Konfigurations-Wizard.

vendor/bin/captainhook configure

Der Wizard stellt einige Fragen, die im ...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang