如何解决为什么“ git submodule update”会跳过一个子模块?
我有一个带有单个子模块sub/x
的git repo。 (此子模块不包含其自己的任何子模块。)
在超级项目的仓库中,git status
的输出显示了以下(未分段的)修改
modified: sub/x (new commits)
如果我现在跑步
git submodule update
...在超级项目上,以下行被打印到终端(仅此而已):
Skipping submodule 'sub/x'
此后,超级项目上git status
的输出保持不变,如上所示。
(如果我将--init
添加到git submodule update
命令,则同上。)
问::如何确定为什么git submodule update [--init]
跳过sub/x
子模块?
解决方法
(注意:我只检查了一个最新的Git版本,并且子模块代码一直在进行更改,因此可能不是唯一的情况。但这是消息可以在最新的Git中出现的唯一位置。 )
编辑2::当超级项目的.git/config
中有一个明确的update = none
设置时,以下情况似乎适用。这比我在下面所做的猜测更有意义。这是||
表达式的前半部分。我以为没有update = none
设置,而我们从下半年开始(未指定,type = 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.name.update
中没有为给定子模块设置.git/config
设置并且未指定更新类型时(git submodule update
中没有--checkout
),将触发此代码。所以:
git submodule update --checkout
将覆盖此设置,就像将子模块的更新设置配置为checkout
一样。 编辑:我不明白为什么为什么这样的代码:the documentation表示默认值为checkout
,并且与实际情况有所不同与默认设置为checkout
相比,设置为checkout
的设置似乎与此要求不符。
检查子模块本身是否被忽略:
git check-ignore -v -- sub/x
还要检查.gitmodules
文件for any ignore
directive。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。