Git 忽略陌生事物

问题描述 投票:0回答:3

在我的存储库中,我有以下目录结构:

/
|-dir1
|    |-file1
|    |-file2
|    |-file3
|-dir2
|    |-file4
|    |-file5.derp
|    |-file6
|-dir3
     |-file7
     |-file8

我的

.gitignore
文件(位于根目录)如下:

dir2/
!dir2/*.derp

然而,

file5.derp
从未被
git add
找到...

我在这里缺少什么?

git gitignore ignore
3个回答
3
投票

尝试这样的 .gitignore:

dir2/*
!dir2/*.derp

每个 gitignore 手册页:http://www.kernel.org/pub/software/scm/git/docs/gitignore.html

如果模式以斜杠结尾,则出于以下描述的目的,它将被删除,但它只会找到与目录的匹配项。换句话说, foo/ 将匹配目录 foo 及其下面的路径,但不会匹配常规文件或符号链接 foo (这与 git 中 pathspec 通常的工作方式一致)。

我怀疑它忽略了该目录中的所有文件,并且没有达到使用 !. 进行检查的程度。


2
投票

你必须像这样:

dir2/*
!dir2/*.derp

在您尝试的操作中,

dir2/
显然会忽略该目录,并且 git 不会下降到该目录中以忽略
.derp
文件。在上述情况下,它会忽略
dir2
的所有子级,而不是
dir2
本身,因为
dir2/*
,然后您忽略
.derp
文件


0
投票

模式

dir2/*.derp
指定的文件不是“忽略”的原因是出于性能原因,不再考虑排除的目录,如最新的git文档中所述:

可选前缀“!”这否定了模式;先前模式排除的任何匹配文件将再次包含在内。 如果排除该文件的父目录,则无法重新包含该文件。出于性能原因,Git 不会列出排除的目录,因此包含的文件上的任何模式都无效,无论它们是在哪里定义的。

© www.soinside.com 2019 - 2024. All rights reserved.