現在および将来のすべてのリポジトリにgit post-commitフックを適用する


275

Gitのポストコミットフックを作成しましたが、正しく動作します。ただし、このフックを追加して、現在作業中の(および将来の)すべてのgitリポジトリに適用したいと考えています。~/.git/hooks/プロジェクトディレクトリのフックディレクトリではなく、自分にフックを追加しようとしましたが、これは機能していないようです。

システムのすべてのリポジトリに適用されるグローバルGitフックを作成する方法はありますか(それらを各プロジェクトディレクトリにコピーする必要はありません)?そうでない場合、今後の最良の解決策は何ですか-おそらくgit-initテンプレートですか?


3
Git 2.9の時点で、これに対するこの最善のアプローチが変更されました。stackoverflow.com/a/372​​93198/2741954
Simon Brahan

これはあなたの質問に答えますか?デフォルトのgitフックを変更する
Oliver Sieweke

回答:


192

このフックを追加して、現在取り組んでいる(そして将来の)すべてのgitリポジトリに適用したい

git 2.9+(2016年6月)では、次のことを行うだけです。

git config --global core.hooksPath /path/to/my/centralized/hooks

デフォルトのgitフックを変更する」を参照してください。これは、一元化されたフックを管理するために行われました。


既存のリポジトリがあり、変更をプルする他のすべての開発者に更新済みのpre-commitフックが必要な場合、たとえばどのようにすればよいですか?ありがとう
Richlewis

@Richlewisは、stackoverflow.com / a / 40550555/6309が完全に明確ではなかったことを意味しますか?
VonC 2016

@Richlewisすべての開発者が自分のローカル構成で参照できるように、すべての開発者がアクセスできる共有フォルダーをセットアップする必要があります。
VonC

残念ながら、私はまだそれを完全には理解していません。リポジトリ内には/.git/hooks/pre_commitそれを指すことができますか?
Richlewis

@Richlewis私はあなたの元の質問であなたに答えました。
VonC 2016

290

git 1.7.1以降、gitconfigでinit.templatedirを設定して、テンプレートの検索場所をgitに指示できます。

次のように設定します。

git config --global init.templatedir '~/.git_template'

その後、作成または複製する新しいリポジトリは、このディレクトリをテンプレートに使用します。に必要なフックを配置します~/.git_template/hooksgit init同じディレクトリで実行することにより、既存のリポジトリを適切なテンプレートで再初期化できます.git

1.7.1より前のバージョンのgitのgit init --template ~/.git_template場合、私のように実行していても.git_template、残りのドットファイルと一緒にディレクトリを管理したい場合は動作します。また、$GIT_TEMPLATE_DIR環境を使用してgit init、テンプレートディレクトリがどこにあるかを知ることもできます。


51
すばらしい答えです。誰も他の不思議を再実行している場合であればgit init、既存のレポでは、それを拭く- それはしません、以下を参照してください。stackoverflow.com/questions/5149694/...
Konturが運営

私にとっては、既存のリポジトリでgit initを使用してファイルをコピーするためのgitテンプレートフォルダーへの相対パスでは機能しませんでした。代わりにフルパスを使用していました。
user847988 2015

1
引用のないウィンドウ: `git config --global init.templatedir d:\ git \ .git_template \`
Vladimir Vukanac

1
ヒント:テンプレートフックがコピーされます。グローバルフックを一緒に更新できるようにする場合は、フックを別の場所に置き、テンプレートディレクトリにシンボリックリンクを追加します(Linuxの場合)。リンクパスが絶対パスであることを確認してください。
Tim Allclair 16

1
実行git initしても実際にはフックは更新されませんでした。すでに存在するファイルは上書きされないようです。stackoverflow.com/questions/10791486/。代わりに、最初に古いフックファイルを削除する必要があります。
Phil R

69

あなたは(あなた以外のユーザーを含む)システム上のどこにでもそれらをしたい場合は、インストールテンプレートディレクトリの内容を変更することができます-それらがである$PREFIX/share/git-core/templates/hooksところ、$PREFIXおそらくです/usr/local/usr

これをあなたのためだけにしたいのであれば、はい、最も簡単なのは--templategit-initのオプションです。保持したいデフォルトのインストール済みバージョン(個々のフック、情報ディレクトリ...)へのシンボリックリンクを含む個人用テンプレートディレクトリを簡単に保持し、独自のコンテンツhooks/post-commitやその他のカスタマイズしたいものを保持できます。


11
おかげで、これはうまくいきました。そして、それを既存のプロジェクトにさかのぼって適用するために、git initもう一度実行すると、新しいフックが追加されました。
スワンソン、2010

これは適切な回避策ですが、すべてのリポジトリを変更する必要があります。これは実現可能ですが、プラグインなどで可能性はありますか(これはBazaarで行われる方法です)。
Martin Ueding、2011

2
OS X上のSourceTreeの組み込みgitの場合、それらは次の場所にあります/Applications/SourceTree.app/Contents/Resources/git_local/share/git-core/templates/hooks
CupawnTae

1
Windowsの場合、これはgitインストールディレクトリmingw64\share\templates\hooks(32ビットの場合はmingw32)にあります
オタクの

1
@nerdherdはmingw64\share\git-core\templates\hooks(gfw 2.25)になりました
RJFalconer

7

ミニマリストのアプローチはgit_hooks/、リポジトリにディレクトリを作成して、そのプロジェクト用に作成したフックを追跡し、それをで言及することで将来のユーザーの注意を引き、READMEクローンを作成した後、それらに頼って正しいことを行うことです。私はしばらくこれについて議論し、漸進的なアプローチを選びました。今後は、git-hooksなどのツールの使用を検討するかもしれません。


1
これは本当の解決策とは程遠いので、私は反対票を投じなければなりませんでした。
VictorSchröder19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.