web-dev-qa-db-ja.com

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

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

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

260
swanson

このフックを追加して、現在作業中の(および将来の)すべてのgitリポジトリに適用します。

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

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

change git hooks 」を参照してください。これは、集中フックを管理するために行われました。

162
VonC

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

次のように設定します。

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

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

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

282
sklnd

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

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

69
Cascabel

最小限のアプローチは、リポジトリにgit_hooks/ディレクトリを作成して、そのプロジェクト用に作成したフックを追跡し、READMEで言及することで将来のユーザーの注意を引き、それらに依存することです。彼らがクローンを作った後に正しいことをする。私はこれについてしばらくの間考えており、漸進的なアプローチを選択しました。将来的には git-hooks のようなツールの使用を検討するかもしれません。

6
Neil Best