我在.gitmodule
文件中看到ignore = dirty
。
示例:
[submodule "docs/submodules/netvirt"]
path = docs/submodules/netvirt
url = ../netvirt
branch = .
ignore = dirty
文档说明:
“脏”将忽略对子模块工作树的所有更改,并且只考虑子模块的头和超级项目中记录的提交之间的差异。
我不明白这是什么意思。有人能用一种简单的语言来描述这一点吗?
我所理解的是,当我将子模块添加到超级项目中时,它处于状态C(头在C),然后在一段时间之后,它现在处于状态F(头在F)。ignore=dirty
将只考虑更改D、E、F(这是它应该做的!)
显然,我误解了一些事情。那是什么?
2条答案
按热度按时间s1ag04yj1#
“脏”一词在这里的意思与在Git中的其他地方相同:有问题的repo跟踪了具有尚未提交的修改的文件(先前已提交的文件),和/或存在新的未跟踪的文件。
在子模块的
ignore = dirty
设置的上下文中,这意味着如果子模块是脏的(即,如果它跟踪了具有尚未提交的修改的文件,和/或新的未跟踪的文件),则此类更改将被忽略。不能忽略的是 checkout 提交中的差异,例如,父项目指向提交C
,而子模块当前 checkout 了提交F
。以下是子模块的可能状态,以及设置为
ignore = dirty
的父项目中的状态:1.子模块 checkout 了与父项目中记录的相同的提交,工作目录是干净的(没有修改或未跟踪的文件)。父项目将子模块显示为没有更改。
1.子模块 checkout 了与父项目中记录的相同的提交,工作目录是脏的(已修改或未跟踪文件)。父项目将子模块显示为没有更改(从
ignore = dirty
开始)。1.子模块 checkout 的提交不同于父项目中记录的提交,工作目录是干净的。父项目将子模块显示为发生了更改(可视化为提交散列中的更改)。
1.子模块 checkout 的提交不同于父项目中记录的提交,工作目录是脏的。父项目将子模块显示为发生了更改(仍然显示为提交散列中的更改,因为
ignore = dirty
)。x7rlezfr2#
在我的例子中,我有4个文件在vscode中保存时自动格式化,虽然内容没有什么不同,但格式化导致它们被视为已修改而未提交。找到了这些文件,取消了格式化,“脏”的引用就消失了。