我有一个带有单个子模块 sub/x
的 git 存储库。 (这个子模块不包含它自己的任何子模块。)
在 super 项目的 repo 中,git status
的输出显示了以下(未暂存的)修改
modified: sub/x (new commits)
如果我现在跑
git submodule update
...在 super 项目上,以下行被打印到终端(仅此而已):
Skipping submodule 'sub/x'
在此之后, super 项目上git status
的输出仍然如上图所示,没有变化。
(同上,如果我将 --init
添加到 git submodule update
命令。)
问:我如何确定为什么 git submodule update [--init]
会跳过 sub/x
子模块?
最佳答案
(注意:我只检查了一个非常新的 Git 版本,子模块代码一直在变化,所以这可能不是唯一的情况。但这是最新 Git 中唯一可以出现消息的地方。 )
编辑 2: 似乎以下情况适用于 super 项目的 .git/config
有明确的 update = none
在其中设置。这比我在下面所做的猜测更有意义;这是||
的前半部分表达在这里。我假设没有 update = none
设置,但我们从后半部分开始得到这个(未指定且类型 = 无),但我仍然觉得这令人困惑。
(下面继续原来的回答)
此消息出现在 the Git submodule helper code 中:
if (suc->update.type == SM_UPDATE_NONE
|| (suc->update.type == SM_UPDATE_UNSPECIFIED
&& update_type == SM_UPDATE_NONE)) {
strbuf_addf(out, _("Skipping submodule '%s'"), displaypath);
strbuf_addch(out, '\n');
goto cleanup;
}
此代码在没有 submodule.<em>name</em>.update
时触发在 super 项目的 .git/config
中设置的设置对于给定的子模块,更新类型未指定( git submodule update
没有 --checkout
)。所以:
git submodule update --checkout
会覆盖它,就像将子模块的更新设置配置为 checkout
一样. 编辑:我不明白为什么代码是这样的:the documentation说默认是checkout
, 并且在实际设置设置为 checkout
时表现不同, 与默认为 checkout
, 似乎与这种说法不符。
关于git - 为什么 'git submodule update' 会跳过子模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63974493/