2

これが状況です。複数のサブモジュールを含む git リポジトリがあります。最上位ディレクトリとすべてのサブモジュールの両方に、Visual Studio 2010 ソリューションが含まれています。

最上位のリポジトリは、最新のサブモジュールに依存しており、サブモジュールは更新されるたびに再構築する必要があります。任意の数のサブモジュールがあるため、私がやりたいことは、更新されたばかりのサブモジュールをコンパイルするために、git である種の更新後のフックを作成することです。

だから私の質問はこれです:サブモジュールが更新されたときにどのフックが呼び出されますか? ポストチェックアウトが私が望むものかもしれないようですが、よくわかりません。

それが違いを生む場合、バックエンドとしてGit for Windows(msysgit)でTortoiseGitを使用しています。

4

1 に答える 1

1

レポとして機能するはずpost-update hookです:そのファイルの変更を検出するために、ファイルの変更
を監視する必要があります(親レポの別のクローンがサブモジュールを変更し、新しい参照をコミットしたことを示します.gitmodules親リポジトリ)。
次に、次のことができます。

  • どのサブモジュールが変更されたかを検出する
  • サブモジュールを最新の状態にするかどうかを決定します ( git submodule update --recursive)
  • 関連するサブモジュールを再コンパイルします

ただし、親リポジトリのクローンがサブモジュールの新しいコミットを参照するように変更されていることを前提としています。

サブモジュールが親レポとは無関係に更新される場合post-update、親レポのチェックアウト/更新時に同じフック (親レポにある) は、次のことを行う必要があります。

  • 各サブモジュールに入り、フェッチを実行します
  • フェッチが新しいコミットを導入するかどうかを確認します
  • サブモジュールを最新の状態にするかどうかを決定します。今回は、サブモジュールから変更をプルします。
  • 親リポジトリに戻ってコミットし、変更サブモジュールの新しい SHA1 を登録します
  • git pull必要なもの(つまり、変更されたもの) を再コンパイルします。

各サブモジュールに更新後のフックをセットアップすることもできますが、上記のアプローチは、検出プロセスを 1 か所 (post-update親リポジトリのフック) に集中させるため、親リポジトリにサブモジュールを追加または削除する場合により適しています。

于 2011-05-01T12:05:06.480 に答える