我有以下 .gitignore
文件
*.pyc
project/app/dist/*
project/bin/*
project/etc/*
project/var/*
!README.txt
到目前为止一切顺利,我的大部分 README.txt
文件都没有被忽略,就像我希望它发生一样,除了 project/ect/downloads/README.txt
。该文件被忽略了。为什么是这样?我该如何解决这个问题?
如果我没记错的话,我可以简单地将它手动添加到我的项目中,但我想了解我在忽略该文件时做错了什么。
最佳答案
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
关于git - 不忽略子目录中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170137/