グローバル git フック

グローバル git フック

Git リポジトリを作成するすべての方法をフックすることは可能ですか? そうすれば、リポジトリがクローンされ、初期化されるときにスクリプトを実行できます... (フォルダーの移動/コピー以外の方法はありますか?)。

私の目的は、すべてのリポジトリを追跡することです。そのため、何らかのアクションを実行するためにすべてのディレクトリを調べる必要はありません (主に、git status変更をコミットするのを忘れることがあるためgit gc --auto)。

答え1

フックは (現在のところ) リポジトリごとに排他的に構成されるため、リポジトリが作成される前にアクティブなフックが存在することはできません。

すべての新しいリポジトリに対してリポジトリ固有の設定を同じように初期化したいだけの場合は、リポジトリテンプレートのメカニズム

独自のテンプレートを使用すると、

  • アクティブ化されたフックをインストールする(<template‑dir>/hooks/<hook‑name>ファイルを提供することにより)、
  • 設定変数を設定する(ファイルを提供する<template‑dir>/config
  • リポジトリごとの除外ルールまたは属性を設定します (<template‑dir>/info/excludeまたは<template‑dir/info/attributes>ファイルを提供して)。

ディレクトリ内にある任意の構成ファイルを.gitテンプレートに配置して、テンプレートから初期化された新しいリポジトリ内のそのファイルの初期コピーとして使用できます。初期オブジェクトと参照も提供できると思います。

カスタマイズしたテンプレート ディレクトリを作成したら、そのディレクトリgit initgit cloneその場所を指定する必要があります。これは、--templateオプションを使用して明示的に行うこともできます (Git 0.99.4 以降)。または、GIT_TEMPLATE_DIR環境変数を使用して暗黙的に行うこともできます (Git 1.5.0 以降)。あるいは、init.templatedir"グローバル" (ユーザーごと) または "システム" Git 構成ファイル (つまり、~/.gitconfigまたは/etc/gitconfig(インストールによって異なる)、Git 1.7.1 以降) で構成変数を設定することで暗黙的に行うこともできます。

答え2

Git リポジトリを「追跡」することはできません (「現在アクティブな Git リポジトリのリストを中央の参照先に問い合わせる」など)。
各 Git リポジトリは互いに独立しています。

考えられる解決策としては、次の 2 つが考えられます。

  • クリスの回答にあるgitテンプレートの1つにクライアント側フック初めて使用するときに、git リポジトリを何らかの「中央」ファイルに登録できます。
    その後、そのファイルは外部スクリプト (git の外部) によって読み取られ、関連するものgit statusgit gc必要な内容が作成されます。

  • すべてのgitリポジトリが同じ共通ディレクトリの下に宣言されている場合は、グローバル親gitリポジトリを宣言し、すべてのサブリポジトリを次のように追加できます。サブモジュール
    以来git1.7.0git statusサブモジュールにコミットされていない変更が含まれているかどうかを認識します 。

関連情報