gpt4 book ai didi

git - 为什么 'git submodule update' 会跳过子模块?

转载 作者:行者123 更新时间:2023-12-05 01:10:39 25 4
gpt4 key购买 nike

我有一个带有单个子模块 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com