Git サブモジュールを追加するときにブランチ/タグを指定するにはどうすればよいですか? 質問する

Git サブモジュールを追加するときにブランチ/タグを指定するにはどうすればよいですか? 質問する

どのようにgit submodule add -b機能しますか?

特定のブランチを持つサブモジュールを追加した後、新しいクローン リポジトリ ( の後git submodule update --init) は、ブランチ自体ではなく、特定のコミットになります (git statusサブモジュールの に「現在どのブランチにも存在しません」と表示されます)。

サブモジュールのブランチや特定のコミットに関する情報が見つからないのです.gitmodulesが、Git はどうやってそれを把握するのでしょうか?.git/config

また、ブランチの代わりにタグを指定することは可能ですか?

ベストアンサー1

ここで、他の回答を寄せ集めただけの回答を追加したいと思いますが、より完全なものになると思います。

これら 2 つがあれば、Git サブモジュールがあることがわかります。

  1. .gitmodules次のようなエントリがあります:

    [submodule "SubmoduleTestRepo"]
        path = SubmoduleTestRepo
        url = https://github.com/jzaccone/SubmoduleTestRepo.git
    
  2. 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
    

    注意:ファイルではブランチ名のみがサポートされており.gitmodulesSHA と TAG はサポートされていません。git add . (その代わりに、各モジュールのブランチのコミットは、たとえば のように" " を使用して追跡および更新することができ、毎回ファイルをgit add ./SubmoduleTestRepo変更する必要がありません).gitmodules

    サブモジュール オブジェクトは、特定のコミットを指しています。このオプションで得られる唯一のことは、Vogella の回答に従って、更新にフラグ-bを追加する機能です。--remote

    git submodule update --remote
    

    サブモジュールのコンテンツをサブモジュールが指すコミットに設定する代わりに、そのコミットをマスター ブランチの最新のコミットに置き換えてから、そのコミットをサブモジュールに設定します。これは、djacobs7 の回答によって 2 つの手順で実行できます。サブモジュール オブジェクトが指しているコミットを更新したので、変更されたサブモジュール オブジェクトを Git リポジトリにコミットする必要があります。

    git submodule add -bブランチですべてを最新の状態に保つ魔法のような方法ではありません。単にファイルにブランチに関する情報を追加し.gitmodules、サブモジュール オブジェクトを、指​​定したブランチの最新のコミットに更新してから設定するオプションを提供します。

おすすめ記事