Git checkoutでブランチを切り替えるとき、ほとんどの場合、サブモジュールを更新する必要があると思います。
例で更新:
ブランチAでは、gitチェックアウトBを実行すると、ブランチBの作業用コピーがサブモジュールSに3852f1で(変更されたSを使用して)作成されます。 git submodule updateはfd72d7でSをチェックアウトします。
自動的に更新されないサブモジュールは、Gitの開発目標と一致していると思います。 Gitは分散モードで動作することを意図しており、明示的に指示しない限り、ローカル以外のリポジトリに接続できるとは想定していません。 Gitがサブモジュールを自動更新しないのは、そのように考えると予想される動作です。
そうは言っても、それらのサブモジュールを常にプルインしたいことがわかっていて、それらのサブモジュールから別のローカルリポジトリに分岐しないことがわかっている場合は、後で自動的に更新しても問題はありません。チェックアウト。
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デフォルト動作であると私は感じています。