代码之家  ›  专栏  ›  技术社区  ›  serbaut

为什么Git子模块更新在Git签出时不是自动的?

  •  60
  • serbaut  · 技术社区  · 16 年前

    当使用git checkout切换分支时,我假设大多数时候您都希望更新子模块。

    • 你在什么情况下 要在切换后更新子模块吗?
    • 如果这是由Git签出自动完成的,会破坏什么?

    更新示例:

    • 分支A的子模块S位于3852F1
    • 分支B在FD72D7上有子模块S

    在分支A上,git checkout b将生成分支B的工作副本,子模块s位于3852f1(修改了s)。Git子模块更新将在FD72D7处签出。

    2 回复  |  直到 7 年前
        1
  •  21
  •   Aaron    16 年前

    我相信没有自动更新的子模块符合Git的开发目标。Git是在分布式模式下工作的,除非您明确地告诉它,否则它不会假定您甚至能够连接到非本地存储库。当想到这种方式时,git不会自动刷新子模块。

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

        2
  •  11
  •   Ciro Santilli OurBigBook.com    7 年前

    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。