当使用git checkout切换分支时,我会假设大多数时候你想要更新你的子模块。
更新了示例:
在分支A上,git checkout B将导致分支B的工作副本,子模块S为3852f1(带有修改的S)。 git submodule update将在fd72d7结帐S.
答案 0 :(得分:21)
我认为子模块不会自动更新符合Git的开发目标。 Git旨在以分布式模式工作,并不假定您甚至能够连接到非本地存储库,除非您明确告诉它。当想到这种方式时,Git不会自动刷新子模块将是预期的行为。
话虽如此,如果您知道您总是希望将这些子模块拉入并且您知道您永远不会将这些子模块分支到另一个本地存储库,那么如果您自动将其分解,则它不会破坏任何内容结帐后刷新它们。
答案 1 :(得分:14)
with open(filename, 'rb') as f:
已添加到git 2.13
git checkout --recurse-submodules
选项已添加到git 2.14
设为:
submodule.recurse
git config --global submodule.recurse true
说:
指定默认情况下命令是否递归到子模块。这适用于具有
man git-config
选项的所有命令。默认为false。
答案 2 :(得分:2)
在Git 2.27(2020年第二季度)中,“ --recurse-submodules
”选项的文档更好。
请参见commit acbfae3的commit 4da9e99,commit d09bc51,commit b3cec57,commit dd0cb7d,Damien Robert (damiens-robert
)(2020年4月6日)。
(由Junio C Hamano -- gitster
--在commit cc908db中合并,2020年4月28日)
doc
:--recurse-submodules
主要适用于活动子模块签名人:Damien Robert
帮助者:菲利普·布兰该文档涉及“初始化的”或“填充的”子模块,以说明哪些子模块受“
--recurse-submodules
”的影响,但此处的实际术语是“active
”。 '子模块。相应地更新文档。一些术语:
- Active is defined in gitsubmodules(7),它仅涉及配置变量'
submodule.active
','submodule.<name>.active
'和'submodule.<name>.url
'。
函数submodule.c::is_submodule_active
检查子模块是否处于活动状态。- 已填充表示存在子模块的工作树(并且gitfile正确指向子模块存储库),即,超级项目已使用
--recurse-submodules
克隆,或者用户运行了{{ 3}},或分别填充子模块工作树的git submodule update --init
和git submodule init [<path>]
。
这不涉及上面的3个配置变量。- 已初始化(至少在此补丁程序涉及的手册页中)是指以上定义的“填充”和“活动” ,即{{ 1}} git子模块更新--init
[
可以。
](https://git-scm.com/docs/git-submodule)
选项主要影响活动子模块。
--recurse-submodules
是一个例外,该选项影响填充的子模块。
结果,在git fetch
中,访存会影响填充的子模块,但最终的工作树更新只会影响活动的子模块。在
git pull --recurse-submodules
的文档中,让我们区分影响填充子模块的获取部分和仅影响活动子模块的工作树更新。