Im Idealfall werden Hooks in Bash geschrieben, wenn Sie den Beispieldateien folgen. Sie können es jedoch in jeder verfügbaren Sprache schreiben und sicherstellen, dass es das Flag für ausführbare Dateien enthält.
Sie können also einen Python- oder Go-Code schreiben, um Ihre Ziele zu erreichen, und ihn unter dem Hooks-Ordner ablegen. Es wird funktionieren, aber es wird nicht zusammen mit dem Repository verwaltet.
Zwei Optionen
a) Multi-Skripte
Sie können Ihre Hooks in Ihrer Hilfe codieren und Hooks ein kleines Codefragment hinzufügen, um Ihr perfektes Skript wie folgt aufzurufen:
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
b) Einzelskript
Eine coolere Option besteht darin, nur ein Skript hinzuzufügen, um alle zu regieren, anstatt mehrere. Also erstellen Sie ein hooks / mysuperhook.go und richten jeden Haken, den Sie haben möchten, darauf.
$ 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 unterscheiden. Warum? Manchmal möchten Sie zum Beispiel die gleiche Prüfung für Commit und Push durchführen.
Und dann?
Dann möchten Sie vielleicht weitere Funktionen haben, wie zum Beispiel:
- Lösen Sie den Hook manuell aus, um zu überprüfen, ob auch vor einem Commit oder Push alles in Ordnung ist. Wenn Sie nur Ihr Skript aufrufen (Option a oder b), reicht dies aus.
- Lösen Sie die Hooks für CI aus, damit Sie nicht dieselben Überprüfungen für CI neu schreiben müssen. Sie rufen beispielsweise nur die Commit- und Push-Trigger auf. Das gleiche wie oben sollte es lösen.
- Rufen Sie externe Tools wie einen Markdown-Validator oder einen YAML-Validator auf. Sie können Systemaufrufe tätigen und müssen STDOUT und STDERR verarbeiten.
- Stellen Sie sicher, dass alle Entwickler eine einfache Möglichkeit haben, die Hooks zu installieren. Daher muss dem Repository ein nettes Skript hinzugefügt werden, um die Standard-Hooks durch die richtigen zu ersetzen
- Lassen Sie einige globale Helfer, wie z. B. eine Überprüfung zum Blockieren von Commits zum Entwickeln und Beherrschen von Zweigen, diese nicht zu jedem Repository hinzufügen. Sie können es lösen, indem Sie ein anderes Repository mit globalen Skripten haben.
Kann das einfacher sein?
Ja, es gibt verschiedene Tools, mit denen Sie Git-Hooks verwalten können. Jeder von ihnen ist darauf zugeschnitten, das Problem aus einer anderen Perspektive anzugehen, und Sie müssen möglicherweise alle verstehen, um die für Sie oder Ihr Team am besten geeignete zu finden. GitHooks.com bietet viel über das Hooking und verschiedene Tools, die heute verfügbar sind.
Bis heute sind dort 21 Projekte mit unterschiedlichen Strategien zur Verwaltung von Git-Hooks aufgeführt. Einige tun dies nur für einen einzelnen Hook, andere für eine bestimmte Sprache und so weiter.
Eines dieser Tools, das von mir geschrieben und als OpenSource- Projekt kostenlos angeboten wird, heißt hooks4git . Es ist in Python geschrieben (weil es mir gefällt), aber die Idee ist, alle oben aufgeführten Elemente in einer einzigen Konfigurationsdatei namens .hooks4git.ini zu behandeln, die sich in Ihrem Repository befindet und jedes Skript aufrufen kann, das Sie aufrufen möchten, und zwar in jeder Sprache .
Die Verwendung von Git-Hooks ist absolut fantastisch, aber die Art und Weise, wie sie angeboten werden, bringt die Leute normalerweise nur davon ab.