web-dev-qa-db-ja.com

gitサブモジュールトラッキング最新

(巨大な)プロジェクトをgitに移行し、サブモジュールの使用を検討しています。スーパープロジェクトには、リリース、安定、最新の3つの異なるヘッドを配置する計画です。プロジェクトリーダーがリリースと安定ブランチを処理します。必要に応じてサブモジュールを移動します。

問題は「最新の」頭です。スーパープロジェクトの「最新の」ヘッドに、すべてのサブモジュールのマスターブランチを(自動的に)追跡してもらいたい。また、サブモジュールへのすべてのコミットの履歴が表示されれば素晴らしいことです。

私はgitslaveを見てきましたが、それは私たちが望んでいるものとはまったく異なります。助言がありますか?

126
l.thee.a

2013年3月の更新

Git 1.8.2 は、ブランチを追跡する可能性を追加しました。

git submodule」はリモートブランチの先端と統合の新しいモードの学習を開始しました(スーパープロジェクトのgitlinkに記録されたコミットと統合するのではなく)。

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

サブモジュールが既に存在する場合ブランチを追跡したい場合は、「既存のサブモジュールがブランチを追跡する方法」。

サブモジュールに関する一般情報については、 Vogellaのサブモジュールに関するチュートリアル も参照してください。

注意:

git submodule add -b . [URL to Git repo];
                    ^^^

git submodule manページ を参照してください:

.の特別な値は、サブモジュール内のブランチの名前は、現在のリポジトリ内の現在のブランチと同じ名前でなければなりませんを示すために使用されます。


commit b928922727d6691a3bdc28160f93f25712c565f6 を参照してください:

submodule add--branchが指定されている場合は、.gitmodulesに記録します

これにより、新しいサブモジュールを追加するときに、submodule.<name>.branchオプションを.gitmodulesに簡単に記録できます。このパッチにより、

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

に減少します

$ git submodule add -b <branch> <repository> [<path>]

これは、今後の呼び出し

$ git submodule update --remote ...

サブモジュールの初期化に使用したのと同じブランチから更新を取得します。これは通常、必要なものです。

サインオフ:W. Trevor King


元の回答(2012年2月):

サブモジュールは、親リポジトリによって参照される単一のコミットです。
それはそれ自体がGitリポジトリであるため、「すべてのコミットの履歴」はそのサブモジュール内のgit logを介してアクセスできます。

したがって、親がサブモジュールの特定のブランチの最新のコミットを自動的に追跡するには、次のことが必要になります。

  • サブモジュールのcd
  • git fetch/pullして、適切なブランチで最新のコミットが行われていることを確認します
  • 親リポジトリに戻ってCD
  • サブモジュールの新しいコミットを記録するために追加してコミットします。

gitslave (既に見た)が最適なようです。 コミット操作を含む

正しいサブモジュールブランチにチェックアウトし、変更を行い、コミットしてから、スーパープロジェクトに移動してコミットをコミットする(または少なくとも新しい場所を記録する必要があるため)サブモジュールに変更を加えるのは少し面倒ですサブモジュール)。

他の選択肢は detailed here です。

209
VonC