Git-Clone und Post-Checkout-Hook

Laut Handbuch wird der post-checkout Hook nach einem git checkout (wie erwartet) ausgeführt, aber auch nach einem git clone (es sei denn, Sie übergeben --no-checkout ).

Nun gut, jetzt, unter Berücksichtigung der folgenden:

  • Sie haben kein lokales Repository vor einem git clone
  • Haken werden nicht zwischen Fernbedienungen synchronisiert
  • Hooks, die in einem benutzerdefinierten Template-Verzeichnis --template sind, das mit --template werden nicht ausführbar kopiert und daher nicht nach git clone (das ist tatsächlich nicht wahr, wie von Jefromi in seiner Antwort angegeben, aber der Hook wird immer noch nicht ausgeführt)

Es scheint unmöglich, dass ein post-checkout Hook jemals nach einem git clone . Dennoch gibt die githooks man page bei http://git-scm.com/docs/githooks explizit einen Weg vor, um zu verhindern, dass sie ausgeführt wird, und auch Parameter, die im Falle einer Ausführung übergeben werden, was anzeigen würde, dass es möglich ist, einen Custom auszuführen Haken nach einem git-clone .

Also, wie ist es möglich? Ich vermisse hier offensichtlich etwas.

Stellt sich heraus

Ich nehme an, Sie könnten eine benutzerdefinierte Installation vornehmen – benennen Sie die Hooks in .../share/git-core/templates/hooks um, um das .sample Suffix zu entfernen.

Sie können auch ein Template-Verzeichnis voller Symlinks zu einem Hooks-Verzeichnis im Repository post-checkout -> ../../hooks/post-checkout (zB post-checkout -> ../../hooks/post-checkout ). Wenn dann der geklonte Repo diesen bestimmten Hook enthielt, würde er ausgeführt werden.

Sie haben Recht, aber in den meisten Fällen wird es nicht passieren.

Edit: Ich habe es gerade getestet, und die Option --template scheint die --template zu erhalten, so dass es viel einfacher ist, dies zu ermöglichen. Was hast du gesehen, um zu zeigen, dass es das bisschen beraubt hat?

Das letzte Wort zu den Versionen: Sie suchen online nach einer Dokumentation für eine neuere Version von git, als Sie verwenden. Diese function wurde in dfa7a6c hinzugefügt (Klon: beim Checkout den Post-Checkout-Hook ausführen); git describe sagt, dass dies bis v1.6.2-rc2 nicht enthalten war.

Aus der githooks Dokumentation :

Wenn git-init ausgeführt wird, werden eine Handvoll Beispiel-Hooks in das hooks Verzeichnis des neuen Repository kopiert, aber standardmäßig sind sie alle deaktiviert. Um einen Hook zu aktivieren, benennen Sie ihn um, indem .sample Suffix .sample entfernen.

Diese Initialisierung erfolgt im Rahmen der Erstellung einer Klon-Notiz der Aufruf von init_db in builtin-clone.c .

Beispielsweise:

  $ cat / tmp / meine-git-template / hooks / post-checkout 
 #!  / bin / bash
 echo "Hallo von $ 0"

 $ git clone --template = / tmp / my-git-Vorlage file: ///tmp/repo.git my-clone
 Initialisiertes leeres Git Repository in /tmp/my-clone/.git/
 remote: Zählen von Objekten: 3, fertig.
 remote: Gesamt 3 (Delta 0), wieder verwendet 0 (Delta 0)
 Empfangen von Objekten: 100% (3/3), fertig.
 Hallo von .git / hooks / post-checkout