これがgitで可能かどうかはわかりません(まだ見つかりませんが、検索で間違った語彙を使用している可能性があります)が、すべての新しいリポジトリのデフォルトとしてフックを変更して有効にできると便利です(つまり、新しいリポジトリが作成されるたびにカスタマイズする必要はありません。これを行う簡単な方法は、新しいリポジトリを作成するときに私のフックを設定してそれらをchmodするラッパーを書くことですが、gitに組み込まれた方法がある場合、不必要にラッパースクリプトを使用する代わりに、ラッパースクリプトを使用する代わりにそれを使用します。
説明がコメントから削除された回答にコピーされました:
私の質問は、すべての新しいリポジトリのデフォルトの動作を変更できるかどうかです。そのため、新しいリポジトリごとに毎回同じようにカスタマイズする必要はありません。簡単な答えは、リポジトリを作成およびカスタマイズするためのラッパーを作成することです(フックスクリプトを生成してそれらをchmodします)が、このデフォルトの動作もカスタマイズする必要がないようです。
git-init
のマニュアルページから(新しいリポジトリを最初から作成する代わりに既存のリポジトリを複製する場合は git-clone
でも機能します):
--template = <template_directory> テンプレートを使用するディレクトリを指定します。 のデフォルトのテンプレートディレクトリは/usr/share/git-core/templates. です。指定すると、<template_directory>が テンプレートのソースとして使用されますデフォルトではなくファイル。テンプレートファイルには、 ディレクトリ構造、推奨される「除外パターン」、 実行されていない「フック」ファイルのコピーが含まれます。提案されたパターンと フックファイルはすべて変更可能で拡張可能です。
システム全体のテンプレートディレクトリを変更できます(デフォルトは/usr/share/git-core/templates
ですが、マシンの別の場所にある場合があります)。リポジトリを作成または複製するときに、コマンドラインで--template=<template_directory>
を指定できます。または、設定ファイルでデフォルトのテンプレートディレクトリを設定できます。
[init]
templatedir = /path/to/templates
Git 2.9では、フックを集中化するための新しいオプションが用意されています。_core.hooksPath
_
commit 867ad08 、 commit de0824e 、 commit bf7d977 、 commit 49fa52f (2016年5月4日)の ÆvarArnfjörðBjarmason(avar
) 。
( Junio C Hamano-gitster
- によってマージ commit 6675f5 、2016年5月17日)
_git config
_のドキュメント には以下が含まれます:
_core.hooksPath
_
デフォルトでは、Gitは '_
$GIT_DIR/hooks
_'ディレクトリでフックを探します。
これを別のパスに設定します。 '_/etc/git/hooks
_'、Gitはそのディレクトリでフックを見つけようとします。 「_/etc/git/hooks/pre-receive
_」ではなく「_$GIT_DIR/hooks/pre-receive
_」。パスは絶対パスでも相対パスでもかまいません。相対パスは、フックが実行されているディレクトリからの相対パスとして取得されます
この構成変数は、Gitフックを集中的に構成する場合に便利ですリポジトリごとに構成する代わりに、またはより柔軟で集中化された代わりに_
init.templateDir
_デフォルトのフックを変更した場所。
このパスの作成者(ÆvarArnfjörðBjarmasonavar
)が his commit に追加します:
ユーザーが_
/gitroot
_で任意のリポジトリを作成できる集中型Gitサーバーでこれを使用する予定ですが、統合ディスパッチメカニズムを介して中央で実行する必要があるすべてのフックを管理したいと思います。
Git 2.10は_git rev-parse --git-path hooks/<hook>
_でその新しい設定を使用します
Johannes Schindelin(dscho
) による commit 9445b49 (2016年8月16日)を参照してください。
( Junio C Hamano-gitster
- によってマージ commit d05d0e9 、2016年8月19日)
_
rev-parse
_:_core.hooksPath
_で_--git-path
_を尊重
_--git-path
_オプションの考え方は、常に_--git-dir
_の出力をパスの前に付ける必要をなくすだけでなく、_.git
_ディレクトリ内の特定の共通パスのオーバーライドを尊重することでもあります
(例:_git rev-parse --git-path objects
_は、環境変数_GIT_OBJECT_DIRECTORY
_が設定されている場合、その値を報告します)。
_
core.hooksPath
_設定を導入するとき、それに応じてgit_path()
を調整するのを忘れていました。このパッチはそれを修正します。
Git 1.6.5.3(および一部の以前のバージョン)では、.git/hooks
ディレクトリにサンプルフックが配信されます。
$ ls .git/hooks
applypatch-msg.sample post-update.sample prepare-commit-msg.sample
commit-msg.sample pre-applypatch.sample update.sample
post-commit.sample pre-commit.sample
post-receive.sample pre-rebase.sample
$
それらはすべて私のシステムで実行可能です。フックの1つを利用するには、ファイルをコピーするか名前を変更して、 '.sample
'サフィックスを削除します。要件に合わせて適切に編集してください。
コメントで質問に対処する-インストールされているデフォルトのサンプルフックを変更するには、git
がインストールされているディレクトリを見つける必要があります。私のマシンでは、これは$HOME/git
です。つまり、バイナリは$HOME/git/bin/git
にあります。次に、サンプルフックを含むディレクトリは次のとおりです。
$HOME/git/share/git-core/templates/hooks
これらのテンプレートを編集する場合は(注意してください)、それが新しいgitリポジトリにコピーされます。彼らはまだサンプルですが、あなたのサンプルになります。
ディレクトリにサンプル以外のファイルを作成する実験はしていません。コピーされる場合とされない場合があります。ただし、デフォルトの変更には注意してください。次回のアップグレード時に、変更をやり直す必要があります。
MacPortsの場合、ドキュトリーは/opt/local/share/git-core/templates/
になります。
チームメンバーとフックまたはテンプレートを共有するには、通常、$PROJECT_DIR/lib/git/hooks
のようなサブディレクトリをプロジェクトに作成し、次にcp $PROJECT_DIR/git/hooks/* $PROJECT_DIR/.git/hooks
をコピーするRakeタスクまたはシェルスクリプトを作成します。シンボリックリンクは機能しません。