什么是'脏'子模块?

时间:2017-01-11 16:58:50

标签: git git-submodules

我在ignore = dirty文件中看到.gitmodule

示例:

[submodule "docs/submodules/netvirt"]
    path = docs/submodules/netvirt
    url = ../netvirt
    branch = .
    ignore = dirty

文档说明:

  

“dirty”将忽略对子模块工作树的所有更改并采取   只有子模块的HEAD和提交之间的差异   记录在超级项目中。

我无法理解这意味着什么。有人可以用简单的语言说明这一点吗?

我理解的是,当我将子模块添加到超级项目时,它处于状态C(在C处的HEAD),然后在某个时间之后它现在处于状态F(在F处的HEAD)。 ignore=dirty只会考虑更改D,E,F(这应该是它应该做的!)

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

1 个答案:

答案 0 :(得分:6)

这里的术语“脏”与Git中其他地方的含义相同:有问题的回购已跟踪文件(先前已提交的文件),这些文件具有尚未提交的修改,和/或有新的未跟踪文件。

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

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

  1. 子模块检出与父项目中记录的相同,工作目录是干净的(没有修改或未跟踪的文件)。父项目将子模块显示为没有更改。
  2. 子模块在父项目中记录了相同的提交,工作目录是脏的(已修改或未跟踪的文件)。父项目将子模块显示为没有更改(从ignore = dirty开始)。
  3. 子模块签出的提交不同于父项目中记录的,工作目录是干净的。父项目将子模块显示为具有更改(可视化为提交哈希值的更改)。
  4. 子模块检出的提交与父项目中记录的不同,工作目录是脏的。父项目将子模块显示为具有更改(仍然可视化为提交哈希值的更改,因为ignore = dirty)。