1. ホーム
  2. git

[解決済み] Gitサブモジュールを追加する際に、ブランチ/タグを指定するにはどうすればよいですか?

2022-03-19 17:02:51

質問

どのように git submodule add -b はどのように機能するのでしょうか?

特定のブランチを持つサブモジュールを追加した後、新しいクローンリポジトリ( git submodule update --init ) は、ブランチそのものではなく、特定のコミットになります ( git status を表示します("Not currently on any branch")。

に関する情報は見当たりません。 .gitmodules または .git/config サブモジュールのブランチや特定のコミットについて、Git はどのようにそれを判断するのでしょうか?

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

バージョン1.6.5.2を使っています。

解決方法を教えてください。

注:Git 1.8.2 では、ブランチを追跡する機能が追加されました。以下のいくつかの回答をご覧ください。


慣れないうちは少し戸惑いますが、サブモジュールはブランチ上にあるわけではありません。 あなたが言うように、サブモジュールのリポジトリの特定のコミットへのポインタに過ぎません。

つまり、誰かがあなたのリポジトリをチェックアウトしたりコードをプルしたりしたときに git submodule update を実行すると、そのサブモジュールはその特定のコミットにチェックアウトされることになります。

これは、頻繁に変更されないサブモジュールには最適です。なぜなら、プロジェクトに参加している全員が同じコミットでそのサブモジュールを使用できるからです。

サブモジュールを特定のタグに移動させたい場合。

cd submodule_directory
git checkout v1.0
cd ..
git add submodule_directory
git commit -m "moved submodule to v1.0"
git push

そして、submodule_directory をそのタグに変更させたい別の開発者は、次のようにします。

git pull
git submodule update --init

git pull は、そのサブモジュールディレクトリが指すコミットを変更します。 git submodule update は、実際に新しいコードをマージします。