マニュアルによると、post-checkout
フックはgit checkout
の後に実行されます(期待どおり)が、git clone
の後にも実行されます(--no-checkout
を渡さない限り)。
さて、次のことを考慮してください。
git clone
の前にローカルリポジトリがありません--template
で使用されるカスタムテンプレートディレクトリに保存されているフックは実行不可能にコピーされるため、git clone
の後にnotは実行されません。post-checkout
の後にgit clone
フックが実行されることは不可能のようです。それでも、 http://git-scm.com/docs/githooks のgithooks
のマニュアルページには、実行を回避する方法と、実行された場合に渡されるパラメータが明示的に記載されています。実行されました。これは、git-clone
の後にカスタムフックを実行できることを示します。
それで、どうしてそれは可能ですか?私は明らかにここで何かが欠けています。
判明
カスタムインストールを作成できると思います。.../share/git-core/templates/hooks
のフックの名前を変更して、.sample
サフィックスを削除します。
リポジトリ内のフックディレクトリへのシンボリックリンクでいっぱいのテンプレートディレクトリを作成することもできます(例:post-checkout -> ../../hooks/post-checkout
)。次に、複製されたリポジトリにその特定のフックが含まれている場合、それは実行されます。
あなたは正しいですが、ほとんどの場合、それは起こりません。
編集:テストしたところ、--template
オプションはアクセス許可を保持しているように見えるので、それを実現するためのはるかに簡単な方法です。それがそのビットを取り除いたことを示すためにあなたは何を見ましたか?
バージョンに関する最終決定:使用しているよりも新しいバージョンのgitのドキュメントをオンラインで見ています。この機能はdfa7a6cで追加されました(クローン:チェックアウト時にチェックアウト後のフックを実行します)。 git describeによると、これはv1.6.2-rc2まで含まれていませんでした。
githooksドキュメント から:
git-initが実行されると、いくつかのフックの例が新しいリポジトリの
hooks
ディレクトリにコピーされますが、デフォルトではそれらはすべて無効になっています。フックを有効にするには、.sample
サフィックスを削除して名前を変更します。
この初期化は、クローン作成の一部として行われます。 init_db
でのbuiltin-clone.c
の呼び出しに注意してください。
例えば:
$ cat/tmp/my-git-template/hooks/post-checkout #! /bin/bash echo "Hello from $ 0" $ git clone --template =/tmp/my-git-template file:///tmp/repo.git my-clone /tmp/my-clone/.git / remoteで初期化された空のGitリポジトリ:オブジェクトのカウント:3、完了。 remote:合計3(デルタ0) 、再利用0(デルタ0) オブジェクトの受信:100%(3/3)、完了。 。git/hooks/post-checkoutからこんにちは