Idealerweise werden die Hooks in Bash geschrieben, wenn Sie den Beispieldateien folgen. Sie können sie aber auch in jeder anderen verfügbaren Sprache schreiben und müssen nur sicherstellen, dass sie das Flag "ausführbar" haben.
Sie können also einen Python- oder Go-Code schreiben, um Ihre Ziele zu erreichen, und ihn im Ordner hooks ablegen. Er wird funktionieren, aber er wird nicht zusammen mit dem Repository verwaltet werden.
Zwei Optionen
a) Mehrere Skripte
Sie können Ihre Hooks innerhalb Ihrer Hilfe kodieren und ein kleines Codefragment zu den Hooks hinzufügen, um Ihr perfektes Skript aufzurufen, etwa so:
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
b) Einzelne Schrift
Eine kühlere Option ist es, nur ein Skript hinzuzufügen, um sie alle zu beherrschen, anstatt mehrere. Sie erstellen also ein hooks/mysuperhook.go Datei und verweisen Sie auf alle Haken, die Sie haben möchten.
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)
Der Parameter gibt Ihrem Skript an, welcher Hook ausgelöst wurde, und Sie können ihn in Ihrem Code differenzieren. Warum? Manchmal möchten Sie vielleicht dieselbe Prüfung für Commit und Push durchführen, zum Beispiel.
Und dann?
Dann möchten Sie vielleicht weitere Funktionen haben, wie z. B.:
- Lösen Sie den Hook manuell aus, um zu prüfen, ob alles in Ordnung ist, noch bevor ein Commit oder Push erfolgt. Wenn Sie einfach Ihr Skript aufrufen (Option a oder b) würde den Trick tun.
- Auslösen der Haken an CI Sie brauchen also nicht dieselben Prüfungen für CI neu zu schreiben. Es wäre nur der Aufruf der Commit- und Push-Trigger, zum Beispiel. Die gleiche wie die oben sollte es zu lösen.
- Rufen Sie externe Tools auf, wie einen Markdown-Validator oder ein YAML Prüfer. Sie können Syscalls ausführen und müssen Standardausgabe und Standardfehler behandeln.
- Stellen Sie sicher, dass alle Entwickler eine einfache Möglichkeit haben, die Hooks zu installieren. Dazu muss ein nettes Skript zum Repository hinzugefügt werden, das die Standard-Hooks durch die richtigen ersetzt
- Einige globale Hilfen, wie z.B. eine Prüfung zum Blockieren von Übertragungen an Entwicklungs- und Master-Zweige, die nicht zu jedem Repository hinzugefügt werden muss. Sie können das Problem lösen, indem Sie ein weiteres Repository mit globalen Skripten haben.
Kann das einfacher sein?
Ja, es gibt mehrere Tools, die Ihnen bei der Verwaltung von Git-Hooks helfen. Jedes von ihnen ist darauf zugeschnitten, das Problem aus einer anderen Perspektive anzugehen, und Sie müssen möglicherweise alle verstehen, um das für Sie oder Ihr Team am besten geeignete Tool zu finden. GitHooks.com bietet eine Menge Lesestoff zum Thema Hooking und verschiedene heute verfügbare Tools.
Bis heute sind dort 21 Projekte mit unterschiedlichen Strategien zur Verwaltung von Git-Hooks aufgeführt. Einige tun es nur für einen einzigen Hook, andere für eine bestimmte Sprache usw.
Eines dieser Tools, das von mir geschrieben und als Open-Source-Projekt kostenlos angeboten wird, heißt hooks4git . Es ist in Python geschrieben (weil ich es mag), aber die Idee ist, alle oben aufgeführten Punkte in einer einzigen Konfigurationsdatei namens .hooks4git.ini das sich in Ihrem Repository befindet und jedes beliebige Skript in jeder Sprache aufrufen kann, das Sie aufrufen möchten.
Die Verwendung von Git-Hooks ist absolut fantastisch, aber die Art und Weise, wie sie angeboten werden, bringt die Leute meist nur davon ab.