2009-01-09 4 views
201

Wir möchten ein paar grundlegende Hook-Skripts erstellen, die wir alle teilen können - beispielsweise für die Vorformatierung von Commit-Nachrichten. Git hat dafür Hook-Skripte, die normalerweise unter <project>/.git/hooks/ gespeichert sind. Diese Skripts werden jedoch nicht weitergegeben, wenn Benutzer einen Klon erstellen und sie nicht versionsgesteuert sind.Kann Git-Hook-Skripte zusammen mit dem Repository verwaltet werden?

Gibt es eine gute Möglichkeit, jedem zu helfen, die richtigen Hook-Skripte zu bekommen? Kann ich diese Hook-Skripte nur auf versionsgesteuerte Skripte in meinem Repo verweisen?

+1

Eine gute Frage. Ich wünschte nur, es gäbe eine bessere Antwort (ohne Beschwerden bei @mipadi, ich wünschte nur, Git hätte einen Weg, dies auf eine automatische Art und Weise zu tun - auch wenn nur mit einer Option angegeben Git Klon.) – lindes

+0

Ich stimme zu, @ Linde! Aber vielleicht beschränkt dieses Teilen von Haken in absichtlichen? Die Dinge würden für Windows-Benutzer unordentlich werden, nehme ich an. – kristianlm

+0

@kristianlm: Es gibt alle möglichen Gründe, warum es manchmal unordentlich sein könnte ... und manchmal auch, wenn es schön ist, es dort zu haben. Ich wünschte nur, es gäbe eine Option oder etwas, das die Haken kopieren würde. Ich schätze, ich muss mir irgendwann mal den Git-Core-Code ansehen und einen Patch machen. :) (Oder hoffe, dass jemand anderes ... oder lebt mit der Problemumgehung in [Mipadis Antwort] (http://stackoverflow.com/a/427269/313756), oder was auch immer.) – lindes

Antwort

105

Theoretisch könnten Sie ein Verzeichnis hooks (oder den von Ihnen bevorzugten Namen) in Ihrem Projektverzeichnis mit allen Skripten erstellen und sie dann in .git/hooks symbolisch verknüpfen. Natürlich müsste jede Person, die den Repo geklont hat, diese symbolischen Links einrichten (obwohl Sie sich sehr gut vorstellen könnten und ein Deployment-Skript haben, das der Cloner ausführen könnte, um sie halbautomatisch einzurichten).

+26

Dies war nicht trivial, so ich schließe einen Link ein, um zu erklären, wie man richtig verlinkt: http://stackoverflow.com/questions/4592838/symbolic-link-to-a-hook-in-git –

2

Wie wäre es mit git-hooks, es Route .git/hooks aufrufen in Skript unter Projektverzeichnis githooks.

Es gibt auch viele Funktionen, mit denen Sie den Kopier- und Symlink-Haken überall minimieren können.

2

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

99

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

Versetzen Sie Ihre Hooks in ein Tracking-Verzeichnis hooks in Ihrem Repository. Anschließend konfiguriert jede Instanz des Endlagers die verfolgten hooks statt $GIT_DIR/hooks zu verwenden:

git config core.hooksPath hooks 

Im Allgemeinen kann der Pfad absolut oder relativ zu dem Verzeichnis, in dem der Haken ausgeführt werden (in der Regel des Arbeits Baum Wurzel; siehe Abschnitt BESCHREIBUNG von man githooks).

+8

... und das Hooks-Verzeichnis, auf das verwiesen werden kann sei s separate hooks repository;) –

+3

Nun, wird dieser Config-Parameter automatisch gesetzt, wenn du einen Git-Klon machst? – Ring

+3

In der Regel können git config-Variablen nicht vom zu klonenden Repository gesetzt werden. Ich denke das soll die Ausführung von beliebigem Code verhindern. git config steuert die Ausführung von Code über Hooks, den Benutzernamen bei Commit-Nachrichten und andere wichtige Funktionen. –

1

pre-commit macht dies einfach für Pre-Commit Hooks. Beantwortet nicht die Frage des OP bezüglich der Verwaltung eines beliebigen Git-Hooks, aber Pre-Commit-Hooks werden wahrscheinlich am häufigsten für Code-Qualitätszwecke verwendet.

0

Wir verwenden Visual Studio-Lösungen (und damit Projekte), die Pre-und Post-Build-Ereignisse haben. Ich füge ein zusätzliches Projekt namens "GitHookDeployer" hinzu. Das Projekt selbst ändert eine Datei im Post-Build-Ereignis. Diese Datei wird auf das Build-Verzeichnis kopiert. Somit wird das Projekt jedes Mal erstellt und niemals übersprungen. In dem 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 bauen haben.

0

Die meisten modernen Programmiersprachen, oder besser gesagt ihre Build-Tools, unterstützen Plugins, um Git-Hooks zu verwalten. Das bedeutet, dass Sie nur Ihre package.json, pom.xml usw. konfigurieren müssen, und jeder in Ihrem Team hat keine andere Wahl als zu erfüllen, es sei denn, sie ändern die Build-Datei. Das Plugin fügt Inhalte zum .git-Verzeichnis für Sie hinzu.

Beispiele:

https://github.com/olukyrich/githook-maven-plugin

https://www.npmjs.com/package/git-hooks

Verwandte Themen