web-dev-qa-db-ja.com

デフォルトのgitフックを変更する

これがgitで可能かどうかはわかりません(まだ見つかりませんが、検索で間違った語彙を使用している可能性があります)が、すべての新しいリポジトリのデフォルトとしてフックを変更して有効にできると便利です(つまり、新しいリポジトリが作成されるたびにカスタマイズする必要はありません。これを行う簡単な方法は、新しいリポジトリを作成するときに私のフックを設定してそれらをchmodするラッパーを書くことですが、gitに組み込まれた方法がある場合、不必要にラッパースクリプトを使用する代わりに、ラッパースクリプトを使用する代わりにそれを使用します。


説明がコメントから削除された回答にコピーされました:

私の質問は、すべての新しいリポジトリのデフォルトの動作を変更できるかどうかです。そのため、新しいリポジトリごとに毎回同じようにカスタマイズする必要はありません。簡単な答えは、リポジトリを作成およびカスタマイズするためのラッパーを作成することです(フックスクリプトを生成してそれらをchmodします)が、このデフォルトの動作もカスタマイズする必要がないようです。

38
rplevy

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
36
Brian Campbell

Git 2.9では、フックを集中化するための新しいオプションが用意されています。_core.hooksPath_

commit 867ad08commit de0824ecommit bf7d977commit 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() を調整するのを忘れていました。このパッチはそれを修正します。

27
VonC

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リポジトリにコピーされます。彼らはまだサンプルですが、あなたのサンプルになります。

ディレクトリにサンプル以外のファイルを作成する実験はしていません。コピーされる場合とされない場合があります。ただし、デフォルトの変更には注意してください。次回のアップグレード時に、変更をやり直す必要があります。

4

MacPortsの場合、ドキュトリーは/opt/local/share/git-core/templates/になります。

チームメンバーとフックまたはテンプレートを共有するには、通常、$PROJECT_DIR/lib/git/hooksのようなサブディレクトリをプロジェクトに作成し、次にcp $PROJECT_DIR/git/hooks/* $PROJECT_DIR/.git/hooksをコピーするRakeタスクまたはシェルスクリプトを作成します。シンボリックリンクは機能しません。

0
A B