1. ホーム
  2. git

[解決済み] git checkoutでgit submoduleが自動的に更新されないのはなぜですか?

2023-05-04 14:30:45

質問

git checkoutでブランチを切り替えるとき、ほとんどの場合、サブモジュールを更新したいと思うのではないでしょうか。

  • どのような状況で ではない は、切り替え後にサブモジュールを更新したいですか?
  • これがgit checkoutで自動的に行われるとしたら、何が壊れるのでしょうか?

例題を更新しました。

  • ブランチAは3852f1にサブモジュールSを持ちます。
  • ブランチ B は fd72d7 にサブモジュール S を持ちます。

ブランチ A において、git checkout B はブランチ B の作業コピーになり、サブモジュール S が 3852f1 にあります(S は変更されています)。git submodule update は S を fd72d7 にチェックアウトします。

どのように解決するのですか?

git checkout --recurse-submodules が git 2.13 に追加されました。

のリリースノートに記載されています。 https://github.com/git/git/commit/e1104a5ee539408b81566066aaa6963cb87d5cd6#diff-c24776ff22455a30fbb78e378b7df0b0R139

submodule.recurse オプションは git 2.14 で追加されました。

として設定します。

git config --global submodule.recurse true

man git-config は言う。

コマンドがデフォルトでサブモジュールに再帰するかどうかを指定します。これは --recurse-submodules オプションがあるすべてのコマンドに適用されます。デフォルトは false です。

デフォルトでモジュールを更新しないことは、ほとんどのユーザーの期待に反しており、サブモジュールの採用を制限する、悪いGitのデフォルトの動作だと感じています、私は本当に開発者がそれを変更することを望みます。