的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
的排除感谢您的深入响应!我会永远不会猜到unignore-ignore/*方法:) – 2010-07-04 13:14:25
对于ping一个旧帖子的道歉,但在这个问题的三个单独变体上有近十个答案,因此这是我见过的第一个真正令人满意的解决方案。非常感谢! – 2012-08-27 18:45:08
忽略列表必须以'*'结尾。像'public /'这样的东西仍然会忽略下一行中的unignore,它必须是'public/*'。 – 2016-08-11 11:47:07