37

マニュアルによると、post-checkoutフックは a の後に実行されますgit checkout(予想どおり) だけでなく、 a の後にも実行されgit cloneます ( を渡さない限り--no-checkout)。

さて、次のことを考慮してください。

  • 前にローカルリポジトリがありませんgit clone
  • フックはリモート間で同期されません
  • で使用されるカスタム テンプレート ディレクトリに格納されたフックは、実行可能ではない状態--templateでコピーされるため、後で実行されませgit clone(Jefromi の回答で述べられているように、実際にはそうではありませんが、フックはまだ実行されません)。

post-checkoutの後にフックが実行されることはありえないようgit cloneです。それでも、 http: //git-scm.com/docs/githooksgithooksのマニュアル ページには、実行を回避する方法と、実行された場合に渡されるパラメーターが明示的に記載されています。これは、カスタム フックを実行できることを示します。の後。git-clone

それで、どのようにそれが可能ですか?ここで明らかに何かが欠けています。

結局のところ

4

2 に答える 2

19

カスタムインストールを作成できると思います-フックの名前を変更してサフィックス.../share/git-core/templates/hooksを削除します。.sample

また、リポジトリ内のフック ディレクトリへのシンボリック リンクでいっぱいのテンプレート ディレクトリを作成することもできます (例: post-checkout -> ../../hooks/post-checkout)。次に、複製されたレポにその特定のフックが含まれていれば、それが実行されます。

しかし、ほとんどの場合、それは起こりません。

編集:私はそれをテストしたところ、--templateオプションは権限を保持するように見えるので、それを実現するためのはるかに簡単な方法です. それがそのビットを剥ぎ取ったことを示すために何が見えましたか?

バージョンに関する最終的な発言: 使用している git よりも新しいバージョンのドキュメントをオンラインで見ています。この機能は dfa7a6c で追加されました (クローン: チェックアウト時にチェックアウト後のフックを実行します)。git describe によると、これは v1.6.2-rc2 まで含まれていませんでした。

于 2010-01-26T18:11:51.367 に答える
15

githooksのドキュメントから:

git-initが実行されると、少数のサンプル フックがhooks新しいリポジトリのディレクトリにコピーされますが、デフォルトではすべて無効になっています。.sampleフックを有効にするには、サフィックスを削除して名前を変更します。

この初期化は、クローン作成の一部として行われます — in への呼び出しに注意してinit_dbくださいbuiltin-clone.c

例えば:

$ cat /tmp/my-git-template/hooks/post-checkout
#! /ビン/バッシュ
echo "$0 からこんにちは"

$ git clone --template=/tmp/my-git-template file:///tmp/repo.git my-clone
/tmp/my-clone/.git/ で空の Git リポジトリを初期化しました
リモート: オブジェクトのカウント: 3、完了。
リモート: 合計 3 (デルタ 0)、再利用 0 (デルタ 0)
オブジェクトの受信: 100% (3/3)、完了。
.git/hooks/post-checkout からこんにちは
于 2010-01-26T18:16:20.837 に答える