为什么 'git submodule update' 会跳过一个子模块?
Why would 'git submodule update' skip a submodule?
我有一个 git 带有单个子模块 sub/x
的存储库。 (这个子模块不包含它自己的任何子模块。)
在超级项目的回购中,git status
的输出显示了以下(未暂存的)修改
modified: sub/x (new commits)
如果我现在运行
git submodule update
...在超级项目上,以下行被打印到终端(仅此而已):
Skipping submodule 'sub/x'
此后,superproject上git status
的输出如上所示,没有变化。
(同上,如果我将 --init
添加到 git submodule update
命令。)
问: 我如何确定 git submodule update [--init]
跳过 sub/x
子模块的原因?
检查你的子模块本身是否被忽略:
git check-ignore -v -- sub/x
同时检查 .gitmodules
文件,for any ignore
directive。
(注意:我只查看了最近的Git版本,子模块代码一直在变化,所以这可能不是唯一的情况。但这是消息唯一可以的地方发生在最近 Git.)
编辑 2: 当超级项目的 .git/config
中有明确的 update = none
设置时,下面的情况似乎适用。这比我在下面所做的猜测更有意义;这是 ||
表达式的前半部分。我假设没有 update = none
设置,我们从后半部分得到这个(未指定和类型 =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
setting setting in the superproject's .git/config
for the given submodule 时,此代码会触发,并且未指定更新类型(git submodule update
没有 --checkout
)。所以:
git submodule update --checkout
会覆盖它,就像将子模块的更新设置配置为 checkout
一样。 编辑:不明白为什么代码是这样的:the documentation说默认是checkout
,并且实际设置设置为 checkout
与默认设置为 checkout
的行为不同,似乎与此声明不符。
我有一个 git 带有单个子模块 sub/x
的存储库。 (这个子模块不包含它自己的任何子模块。)
在超级项目的回购中,git status
的输出显示了以下(未暂存的)修改
modified: sub/x (new commits)
如果我现在运行
git submodule update
...在超级项目上,以下行被打印到终端(仅此而已):
Skipping submodule 'sub/x'
此后,superproject上git status
的输出如上所示,没有变化。
(同上,如果我将 --init
添加到 git submodule update
命令。)
问: 我如何确定 git submodule update [--init]
跳过 sub/x
子模块的原因?
检查你的子模块本身是否被忽略:
git check-ignore -v -- sub/x
同时检查 .gitmodules
文件,for any ignore
directive。
(注意:我只查看了最近的Git版本,子模块代码一直在变化,所以这可能不是唯一的情况。但这是消息唯一可以的地方发生在最近 Git.)
编辑 2: 当超级项目的 .git/config
中有明确的 update = none
设置时,下面的情况似乎适用。这比我在下面所做的猜测更有意义;这是 ||
表达式的前半部分。我假设没有 update = none
设置,我们从后半部分得到这个(未指定和类型 =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
setting setting in the superproject's .git/config
for the given submodule 时,此代码会触发,并且未指定更新类型(git submodule update
没有 --checkout
)。所以:
git submodule update --checkout
会覆盖它,就像将子模块的更新设置配置为 checkout
一样。 编辑:不明白为什么代码是这样的:the documentation说默认是checkout
,并且实际设置设置为 checkout
与默认设置为 checkout
的行为不同,似乎与此声明不符。