Wir möchten ein paar grundlegende Hook-Skripte erstellen, die wir alle gemeinsam nutzen können - zum Beispiel zum Vorformatieren von Commit-Nachrichten. Git hat Hook-Skripte dafür, die normalerweise unter gespeichert sind <project>/.git/hooks/
. Diese Skripte werden jedoch nicht weitergegeben, wenn Benutzer einen Klon erstellen, und sie sind nicht versioniert.
Gibt es eine gute Möglichkeit, allen zu helfen, die richtigen Hook-Skripte zu erhalten? Kann ich diese Hook-Skripte einfach auf versionierte Skripte in meinem Repo verweisen lassen?
pre-commit
macht dies für Pre-Commit-Hooks einfach. Beantwortet nicht die Frage des OP zur Verwaltung eines beliebigen Git-Hooks, aber Pre-Commit-Hooks werden wahrscheinlich am häufigsten für Zwecke der Codequalität verwendet.Antworten:
Theoretisch könnten
hooks
Sie in Ihrem Projektverzeichnis ein Verzeichnis (oder einen beliebigen Namen) mit allen Skripten erstellen und diese dann mit einem Symlink verknüpfen.git/hooks
. Natürlich müsste jede Person, die das Repo geklont hat, diese Symlinks einrichten (obwohl Sie wirklich ausgefallen sein und ein Bereitstellungsskript haben könnten, das der Kloner ausführen könnte, um sie halbautomatisch einzurichten).Um den Symlink auf * nix zu erstellen, müssen Sie lediglich Folgendes tun:
Verwenden
ln -sf
Sie diese Option, wenn Sie bereit sind, die Inhalte zu überschreiben.git/hooks
quelle
core.hooksPath
zum Einrichten einer Datei außerhalb von .git, um eine Verknüpfung zum Hooks-Ordner herzustellen.In Git 2.9 gibt die Konfigurationsoption
core.hooksPath
ein benutzerdefiniertes Hooks-Verzeichnis an.Verschieben Sie Ihre Hooks in ein
hooks
nachverfolgtes Verzeichnis in Ihrem Repository. Konfigurieren Sie dann jede Instanz des Repositorys so, dasshooks
anstelle von$GIT_DIR/hooks
:Im Allgemeinen kann der Pfad absolut oder relativ zu dem Verzeichnis sein, in dem die Hooks ausgeführt werden (normalerweise der Arbeitsbaumstamm; siehe Abschnitt BESCHREIBUNG von
man githooks
).quelle
Wenn Ihr Projekt ein JavaScript-Projekt ist und Sie
npm
als Paketmanager verwenden, können Sie Shared-Git-Hooks verwenden , um Githooks zu erzwingennpm install
.quelle
.git/hooks
.Für Nodejs- Benutzer besteht eine einfache Lösung darin, package.json mit zu aktualisieren
Die Vorinstallation wird vorher ausgeführt
und leitet git um, um nach Hooks im Verzeichnis. \ hooks (oder einem beliebigen Namen, den Sie wählen) zu suchen . Dieses Verzeichnis sollte . \. Git \ hooks in Bezug auf Dateinamen (abzüglich .sample) und Struktur imitieren.
Stellen Sie sich vor, Maven und andere Build-Tools entsprechen der Vorinstallation .
Es sollte auch plattformübergreifend funktionieren.
Wenn Sie weitere Informationen benötigen, besuchen Sie https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/
quelle
Wie wäre es mit Git-Hooks , die den
.git/hooks
Aufruf in ein Skript im Projektverzeichnis weiterleitengithooks
.Es gibt auch viele Funktionen, mit denen Sie das Kopieren und den Symlink-Hook überall minimieren können.
quelle
Die meisten modernen Programmiersprachen oder besser gesagt ihre Build-Tools unterstützen Plugins zur Verwaltung von Git-Hooks. Das bedeutet, dass Sie nur Ihre package.json, pom.xml usw. konfigurieren müssen und jeder in Ihrem Team keine andere Wahl hat, als die Anforderungen zu erfüllen, es sei denn, er ändert die Build-Datei. Das Plugin fügt für Sie Inhalte zum .git-Verzeichnis hinzu.
Beispiele:
https://github.com/rudikershaw/git-build-hook
https://github.com/olukyrich/githook-maven-plugin
https://www.npmjs.com/package/git-hooks
quelle
Wir verwenden Visual Studio-Lösungen (und damit Projekte) mit Ereignissen vor und nach dem Build. Ich füge ein zusätzliches Projekt mit dem Namen 'GitHookDeployer' hinzu. Das Projekt ändert selbst eine Datei im Post-Build-Ereignis. Diese Datei soll in das Build-Verzeichnis kopiert werden. Daher wird das Projekt jedes Mal erstellt und nie übersprungen. Im Build-Ereignis wird außerdem sichergestellt, dass alle Git-Hooks vorhanden sind.
Beachten Sie, dass dies keine allgemeine Lösung ist, da einige Projekte natürlich nichts zu erstellen haben.
quelle
Sie können Ihren Hooks-Ordner zu einem anderen Git-Repository machen und ihn als Submodul verknüpfen ... Ich denke, es lohnt sich nur, wenn Sie viele Mitglieder und Hooks haben, die regelmäßig geändert werden.
quelle
Sie können eine verwaltete Lösung für das Pre-Commit-Hook-Management wie Pre-Commit verwenden . Oder eine zentralisierte Lösung für serverseitige Git-Hooks wie Datree.io . Es hat eingebaute Richtlinien wie:
Es wird nicht alle Ihre Hooks ersetzen, aber es könnte Ihren Entwicklern bei den offensichtlichsten helfen, ohne dass die Konfiguration die Hooks auf jedem Entwicklercomputer / Repo installieren muss.
Haftungsausschluss: Ich bin einer der Gründer von Datrees
quelle
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:
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.
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:
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.
quelle
Für Gradle-Benutzer
Ich fand diese Skripte sehr nützlich für Gradle-Projekte.
build.gradle
apply from: rootProject.file('gradle/install-git-hooks.gradle')
gradle / install-git-hooks.gradle
Pre-Commit
quelle