517 Stimmen

Können Git-Hook-Skripte zusammen mit dem Repository verwaltet werden?

Wir würden gerne ein paar grundlegende Hook-Skripte erstellen, die wir alle gemeinsam nutzen können - für Dinge wie die Vorformatierung von Commit-Nachrichten. Git hat dafür Hook-Skripte, die normalerweise unter <project>/.git/hooks/ . Diese Skripte werden jedoch nicht weitergegeben, wenn jemand einen Klon erstellt, und sie sind nicht versionskontrolliert.

Gibt es eine gute Möglichkeit, allen zu helfen, die richtigen Hakenskripte zu bekommen? Kann ich diese Hook-Skripte einfach auf versionskontrollierte Skripte in meinem Repo verweisen lassen?

352voto

Max Shenfield Punkte 3427

En Git 2.9 die Konfigurationsoption core.hooksPath gibt ein benutzerdefiniertes Hooks-Verzeichnis an.

Bewegen Sie Ihre Haken zu einem hooks verfolgten Verzeichnis in Ihrem Repository. Konfigurieren Sie dann jede Instanz des Repositorys zur Verwendung der verfolgten hooks anstelle von $GIT_DIR/hooks :

git config core.hooksPath hooks

Im Allgemeinen kann der Pfad absolut oder relativ zu dem Verzeichnis sein, in dem die Hooks ausgeführt werden (normalerweise der Arbeitsbaum Root; siehe Abschnitt DESCRIPTION von man githooks ).

165voto

mipadi Punkte 377834

Theoretisch könnten Sie eine hooks (oder einen anderen Namen, den Sie bevorzugen) in Ihrem Projektverzeichnis mit allen Skripten, und verlinken Sie sie dann in .git/hooks . Natürlich müsste jede Person, die das Projektarchiv geklont hat, diese Symlinks einrichten (obwohl man sich auch etwas einfallen lassen könnte und ein Deployment-Skript einrichten könnte, das der Kloner dann halbautomatisch einrichtet).

Um den Symlink auf *nix zu erstellen, müssen Sie nur folgendes tun:

root="$(pwd)"
ln -s "$root/hooks" "$root/.git/hooks"

utilice ln -sf wenn Sie bereit sind, das zu überschreiben, was in .git/hooks

56voto

Shane Gannon Punkte 5236

Para Node.js Benutzer eine einfache Lösung, indem sie die paket.json mit

{
  "name": "name",
  "version": "0.0.1",
  ......
  "scripts": {
    "preinstall": "git config core.hooksPath hooks",

En vorinstallieren läuft vor

npm-Installation

und leitet Git um, um nach Hooks innerhalb der . \hooks (oder wie auch immer Sie das Verzeichnis nennen wollen). Dieses Verzeichnis sollte folgendes abbilden . \.git\hooks in Bezug auf den Dateinamen (ohne .sample) und die Struktur.

Stellen Sie sich vor: Maven und andere Build-Tools haben ein Äquivalent zu vorinstallieren .

Außerdem sollte sie plattformübergreifend funktionieren.

Wenn Sie weitere Informationen benötigen, sehen Sie unter Zwei Möglichkeiten, Git-Hooks mit Ihrem Team zu teilen .

17voto

kilianc Punkte 6486

Wenn Ihr Projekt ein JavaScript-Projekt ist und Sie die npm als Paketmanager verwenden, können Sie shared-git-hooks um Git-Hooks zu erzwingen auf npm install .

Vollständige Offenlegung: Ich habe dieses Paket geschrieben

15voto

ceremcem Punkte 3212

Ich wollte mehrere Antworten in einer einzigen zusammenfassen. Angenommen, Sie sind in Ihrem project/ Verzeichnis:

Einrichten Ihrer benutzerdefinierten Haken

  1. erstellen. .githooks Verzeichnis und platzieren Sie Ihre Haken darin. (Siehe .git/hooks für Beispiele)

  2. Erstellen einer .gitconfig Datei, die auf das Verzeichnis ¹ :

    git config -f .gitconfig core.hooksPath .githooks
  3. Erstellen Sie die folgende Regel in Ihrem Makefile : ²

    enable-git-hooks:
        git config --local include.path ../.gitconfig
        $(warning REMEMBER, YOU MUST HAVE REVIEWED THE CUSTOM HOOKS!)

Aktivieren Sie Ihre benutzerdefinierten Haken

Jeder Entwickler sollte diese benutzerdefinierten Haken nach der Überprüfung ausdrücklich aktivieren . Fügen Sie eine Direktive in Ihre README ein, etwa so:

Aktivieren Sie benutzerdefinierte Haken NACH DER ÜBERPRÜFUNG, indem Sie make enable-git-hooks .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X