42

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


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

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

4

4 に答える 4

39

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
于 2009-12-29T23:51:41.987 に答える
38

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

commit 867ad08、commit de0824ecommit bf7d977commit 49fa52f (2016 年 5 月 4 日) by Ævar Arnfjörð Bjarmason ( avar)を参照してください。
( 2016 年 5 月 17 日、コミット 6675f50Junio C Hamanoによってマージされました)gitster

git configドキュメントには次のものが含まれるようになりました。

core.hooksPath

デフォルトでは、Git は ' $GIT_DIR/hooks' ディレクトリでフックを探します。
これを ' ' などの別のパスに設定すると、Git はそのディレクトリ (' ' ではなく' '/etc/git/hooksなど) でフックを見つけようとします。/etc/git/hooks/pre-receive$GIT_DIR/hooks/pre-receive

パスは、絶対パスまたは相対パスのいずれかです。相対パスは、フックが実行されるディレクトリからの相対パスとして取得されます

この構成変数は、Git フックをリポジトリごとに構成するのではなく 一元的に構成したい場合や、デフォルトのフックを変更した場所を持つより柔軟で一元化された代替手段として役立ちます。init.templateDir

このパスの作成者 ( Ævar Arnfjörð Bjarmason avar ) は、コミットに次のように追加しています。

ユーザーが の下に任意のリポジトリを作成できる集中型の Git サーバーでこれを使用する予定ですが/gitroot、統一されたディスパッチ メカニズムを介して一元的に実行する必要があるすべてのフックを管理したいと考えています。


Git 2.10 はその新しい設定をgit rev-parse --git-path hooks/<hook>

Johannes Schindelin ( )によるcommit 9445b49 (2016 年 8 月 16 日)を参照してください。( 2016 年 8 月 19 日のコミット d05d0e9Junio C Hamanoによってマージされました)dscho
gitster

rev-parse:敬意core.hooksPathを表します--git-path

このオプションの考え方は、常に の--git-path出力にパスのプレフィックスを付けなくても済むようにするだけでなく、ディレクトリ内の特定の共通パスのオーバーライドを尊重することです (たとえば、設定されている場合は環境変数の値を報告します)。--git-dir.git
git rev-parse --git-path objectsGIT_OBJECT_DIRECTORY

設定を導入するときに、それに応じcore.hooksPathて調整するのを忘れていましたgit_path()。このパッチはそれを修正します。

于 2016-05-18T07:32:32.600 に答える
4

.git/hooksgit 1.6.5.3(および一部の以前のバージョン)では、サンプルフックがディレクトリに配信されます。

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

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

于 2009-12-29T23:46:57.123 に答える
0

MacPorts の場合、ディレクトリは次のようになります。/opt/local/share/git-core/templates/

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

于 2011-03-30T06:03:57.980 に答える