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

标签 git git-submodules

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

相关文章:

git - 排除子项目提交 Git

git - 如何让 git clone --recursive A B 使用 A 中的子模块存储库?

git - 有没有办法处理有很多重复的多个项目?

git - 与此 Git 工作流等效的 Perforce 工作流是什么?货架?

git - 用 release 标记 git 子模块

git - 'git submodule add' 不克隆它

git - 是否可以与子模块同步 check out 主存储库的分支?

Git 在分支之前拆分提交

database - Git 是否适合管理基于 csv 的数据库?

git - 在 bitbucket 中导入本地文件夹