在我的存储库中,我有以下目录结构:
/
|-dir1
| |-file1
| |-file2
| |-file3
|-dir2
| |-file4
| |-file5.derp
| |-file6
|-dir3
|-file7
|-file8
我的
.gitignore
文件(位于根目录)如下:
dir2/
!dir2/*.derp
然而,
file5.derp
从未被git add
找到...
我在这里缺少什么?
尝试这样的 .gitignore:
dir2/*
!dir2/*.derp
每个 gitignore 手册页:http://www.kernel.org/pub/software/scm/git/docs/gitignore.html
如果模式以斜杠结尾,则出于以下描述的目的,它将被删除,但它只会找到与目录的匹配项。换句话说, foo/ 将匹配目录 foo 及其下面的路径,但不会匹配常规文件或符号链接 foo (这与 git 中 pathspec 通常的工作方式一致)。
我怀疑它忽略了该目录中的所有文件,并且没有达到使用 !. 进行检查的程度。
你必须像这样:
dir2/*
!dir2/*.derp
在您尝试的操作中,
dir2/
显然会忽略该目录,并且 git 不会下降到该目录中以忽略 .derp
文件。在上述情况下,它会忽略 dir2
的所有子级,而不是 dir2
本身,因为 dir2/*
,然后您忽略 .derp
文件
模式
dir2/*.derp
指定的文件不是“忽略”的原因是出于性能原因,不再考虑排除的目录,如最新的git文档中所述:
可选前缀“!”这否定了模式;先前模式排除的任何匹配文件将再次包含在内。 如果排除该文件的父目录,则无法重新包含该文件。出于性能原因,Git 不会列出排除的目录,因此包含的文件上的任何模式都无效,无论它们是在哪里定义的。