どのようにgit submodule add -b
機能しますか?
特定のブランチを持つサブモジュールを追加した後、新しいクローン リポジトリ ( の後git submodule update --init
) は、ブランチ自体ではなく、特定のコミットになります (git status
サブモジュールの に「現在どのブランチにも存在しません」と表示されます)。
サブモジュールのブランチや特定のコミットに関する情報が見つからないのです.gitmodules
が、Git はどうやってそれを把握するのでしょうか?.git/config
また、ブランチの代わりにタグを指定することは可能ですか?
ベストアンサー1
ここで、他の回答を寄せ集めただけの回答を追加したいと思いますが、より完全なものになると思います。
これら 2 つがあれば、Git サブモジュールがあることがわかります。
.gitmodules
次のようなエントリがあります:[submodule "SubmoduleTestRepo"] path = SubmoduleTestRepo url = https://github.com/jzaccone/SubmoduleTestRepo.git
Git リポジトリにサブモジュール オブジェクト (この例では SubmoduleTestRepo という名前) があります。GitHubこれらを「サブモジュール」オブジェクトとして表示します。または、
git submodule status
コマンド ラインから実行します。Git サブモジュール オブジェクトは、Git オブジェクトの特別な種類であり、特定のコミットの SHA 情報を保持します。を実行するたびに
git submodule update
、コミットのコンテンツがサブモジュールに取り込まれます。 の情報により、コミットがどこにあるかがわかります.gitmodules
。ここで、
-b
必要なのはファイルに 1 行追加することだけです.gitmodules
。同じ例に従うと、次のようになります。[submodule "SubmoduleTestRepo"] path = SubmoduleTestRepo url = https://github.com/jzaccone/SubmoduleTestRepo.git branch = master
注意:ファイルではブランチ名のみがサポートされており
.gitmodules
、SHA と TAG はサポートされていません。git add .
(その代わりに、各モジュールのブランチのコミットは、たとえば のように" " を使用して追跡および更新することができ、毎回ファイルをgit add ./SubmoduleTestRepo
変更する必要がありません).gitmodules
サブモジュール オブジェクトは、特定のコミットを指しています。このオプションで得られる唯一のことは、Vogella の回答に従って、更新にフラグ
-b
を追加する機能です。--remote
git submodule update --remote
サブモジュールのコンテンツをサブモジュールが指すコミットに設定する代わりに、そのコミットをマスター ブランチの最新のコミットに置き換えてから、そのコミットをサブモジュールに設定します。これは、djacobs7 の回答によって 2 つの手順で実行できます。サブモジュール オブジェクトが指しているコミットを更新したので、変更されたサブモジュール オブジェクトを Git リポジトリにコミットする必要があります。
git submodule add -b
ブランチですべてを最新の状態に保つ魔法のような方法ではありません。単にファイルにブランチに関する情報を追加し.gitmodules
、サブモジュール オブジェクトを、指定したブランチの最新のコミットに更新してから設定するオプションを提供します。