最新のgitサブモジュール追跡


136

(巨大な)プロジェクトをgitに移動し、サブモジュールの使用を検討しています。私たちの計画は、スーパープロジェクトに3つの異なる責任者を置くことです:リリース、安定、最新。プロジェクトリーダーはリリースと安定版ブランチを処理します。必要に応じてサブモジュールを移動します。

問題は「最新」の頭です。スーパープロジェクトの「最新の」ヘッドがすべてのサブモジュールのマスターブランチを(自動的に)追跡するようにします。また、サブモジュールへのすべてのコミットの履歴を表示できると便利です。

私はgitslaveを見てきましたが、それは私たちが望むものではありません。助言がありますか?


:あなたがツールを求めている間、私は同じことをやってワンライナーを収集し、この質問接続したいstackoverflow.com/questions/1030169/...
東武

Gitはサブモジュールで最新の追跡を提供するようになりました。私の編集済みの回答を参照してください。
VonC 2013

回答:


235

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 submodulemanページを参照してください

の特別な値は、サブモジュールのブランチの名前が現在のリポジトリの現在のブランチと同じ名前であること.を示すために使用されます


コミット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(あなたがすでに見たもの)は、コミット操作を含めて、最も適しているようです。

正しいサブモジュールブランチにチェックアウトし、変更を加えてコミットし、スーパープロジェクトに移動してコミットする(または少なくとも、サブモジュール)。

他の代替案はここに詳述されています


1
@BraveNewMathサブモジュールの適切なブランチをチェックアウトし、親リポジトリに移動して次のように入力する必要がありますgit config -f .gitmodules submodule.<path>.branch <branch>。すべてを追加し、コミットしてプッシュします。
VonC

2
@BraveNewMathサブモジュールがstackoverflow.com/a/18799234/6309のブランチを追跡するようにするためのすべての手順を詳しく説明します。
VonC、2013

1
--remote更新時にデタッチされたヘッドを取得したくない場合は、タグを使用することが重要です。なぜ、新しくプルしたコードがマスターの背後にあるように思われるのでしょうか。
クリスワッツ

3
@DC_「私が書いたので」「この答え」に同意します。「ブランチの追跡」機能は、サブモジュールをブランチの最新のコミットに更新するためのものです。それが終わっても、親リポジトリに新しいサブモジュールの状態を追加してコミットする必要があります。そして、次のクローンはその状態をチェックアウトします(ヘッドレス)。
VonC

3
@VonCしたがって、さらに明確にするために、「ブランチの追跡」機能はgit submodule update、サブモジュールを更新するコミット(つまり、マスターでの最新のコミット)にコマンドの動作に影響を与えるだけであり、親リポジトリに自動的に更新を行わせません。クローン時にコミットがサブモジュールによってポイントされていますか?
christner
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.