的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