不要忽略子目录中的文件?

Lee*_*var 5 git

我有以下.gitignore文件

*.pyc

project/app/dist/*
project/bin/*
project/etc/*
project/var/*

!README.txt
Run Code Online (Sandbox Code Playgroud)

到目前为止这么好,我的大多数README.txt文件都没有被忽略,就像我希望它发生的那样除了project/ect/downloads/README.txt.那个文件被忽略了.为什么是这样?我该如何解决这个问题?

如果我没记错的话,我可以简单地手动将它添加到我的项目中,但是我想知道我在忽略文件时做错了什么.

Chr*_*sen 16

Git不会搜索project/etc/downloads/任何文件,因为您已将其配置为忽略project/etc/*."未锚定" !README.txt模式仅适用于否定将被搜索的目录中的条目排除(即,本身未被排除的目录).

如果你排除project/etc/,Git永远不会搜索那个目录,所以否定的排除项永远不会适用于它的内容(甚至不是那么明确的!project/etc/important-file! - 这可能被视为一个错误?).

但是,如果排除project/etc/*,Git将搜索该目录,并且否定排除项可以应用于其内容.一个人可能会意识到第二个模式将始终匹配所有文件,并为两个模式分配相同的含义,但Git,但Git以不同的方式对待它们.

你可能会考虑project/etc/project/etc/*指出同样的事情,但是Git以不同的方式对待它们,因为它没有"意识到"第二个将匹配目录中的所有内容.

因此,要获得!README.txt申请,projects/etc/downloads/您必须取消该目录的签名,但在该!README模式之前忽略其内容:

project/etc/*

# "unignore, but ignore the immediate contents of" project/etc/downloads
# so that subsequent negated patterns can apply to the immediate contents
!project/etc/downloads/
project/etc/downloads/*

!README.txt
Run Code Online (Sandbox Code Playgroud)