什么是“脏”子模块?

7lrncoxx  于 2022-09-21  发布在  Git
关注(0)|答案(2)|浏览(259)

我在.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(这是它应该做的!)

显然,我误解了一些事情。那是什么?

s1ag04yj

s1ag04yj1#

“脏”一词在这里的意思与在Git中的其他地方相同:有问题的repo跟踪了具有尚未提交的修改的文件(先前已提交的文件),和/或存在新的未跟踪的文件。

在子模块的ignore = dirty设置的上下文中,这意味着如果子模块是脏的(即,如果它跟踪了具有尚未提交的修改的文件,和/或新的未跟踪的文件),则此类更改将被忽略。不能忽略的是 checkout 提交中的差异,例如,父项目指向提交C,而子模块当前 checkout 了提交F

以下是子模块的可能状态,以及设置为ignore = dirty的父项目中的状态:

1.子模块 checkout 了与父项目中记录的相同的提交,工作目录是干净的(没有修改或未跟踪的文件)。父项目将子模块显示为没有更改。
1.子模块 checkout 了与父项目中记录的相同的提交,工作目录是脏的(已修改或未跟踪文件)。父项目将子模块显示为没有更改(从ignore = dirty开始)。
1.子模块 checkout 的提交不同于父项目中记录的提交,工作目录是干净的。父项目将子模块显示为发生了更改(可视化为提交散列中的更改)。
1.子模块 checkout 的提交不同于父项目中记录的提交,工作目录是脏的。父项目将子模块显示为发生了更改(仍然显示为提交散列中的更改,因为ignore = dirty)。

x7rlezfr

x7rlezfr2#

在我的例子中,我有4个文件在vscode中保存时自动格式化,虽然内容没有什么不同,但格式化导致它们被视为已修改而未提交。找到了这些文件,取消了格式化,“脏”的引用就消失了。

相关问题