为什么在git checkout上git子模块更新不自动?

当使用git checkout切换分支时,我会假定大部分时间你都想更新你的子模块。

  • 在什么情况下,你不想在切换后更新子模块?
  • 如果这是通过git checkout自动完成的,会破坏什么?

以例子更新:

  • 分支A在3852f1具有子模块S.
  • 分支B在fd72d7有子模块S.

在分支A上,git checkout B将产生分支B的工作副本,子模块S在3852f1(带有修改的S)。 git子模块更新将在fd72d7结帐。

我相信不会自动更新的子模块是符合Git的发展目标的。 Git的目的是在分布式模式下工作,并不认为你甚至可以连接到非本地存储库,除非你明确告诉它。 Git不自动刷新子模块会是这样想的预期行为。

据说,如果你知道你总是希望这些子模块被拉入,并且你知道你永远不会将这些子模块分支到另一个本地存储库,那么如果你自动刷新它们之后它不应该破坏任何东西结帐。

git checkout --recurse-submodules将被添加到git 2.13

这在发行说明中提到: https : //github.com/git/git/commit/e1104a5ee539408b81566066aaa6963cb87d5cd6#diff-c24776ff22455a30fbb78e378b7df0b0R139

在这个邮件列表线程中 ,Git开发者Randall S. Becker说他也打算在稍后添加一个submodule.recurseconfiguration来默认打开它,我想这可能会在某个时候被合并。

然后,我们只需要等待它成为默认的git 3.0! 🙂