我有以下.gitignore
文件
*.pyc
project/app/dist/*
project/bin/*
project/etc/*
project/var/*
!README.txt
到目前为止,我的大多数README.txt
文件都没有被忽略,就像我希望它发生一样,除了project/ect/downloads/README.txt
。那个文件被忽略了。为什么是这样?我该如何解决这个问题?
如果我没记错的话,我可以手动将它添加到我的项目中,但是我想知道我在忽略文件时做错了什么。
答案 0 :(得分:16)
Git不会搜索project/etc/downloads/
任何文件,因为您已将其配置为忽略project/etc/*
。 “unanchored”!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
答案 1 :(得分:3)
在.gitignore文件中,在/ project / etc / *之后添加2行:
!/project/etc/downloads/ /project/etc/downloads/*