此篇為番外,未收入在本篇是因為 Ignore 並不是個工具,而是個會常被各種工具採用的一種配置方式。
Ignore 檔案用來排除匹配的檔案。
Ignore 檔案使用特定格式與通用字元來排除不想被特定工具處理的檔案或目錄。
以 git 的 .gitignore 為例,只要符合 ignore 檔案的設定,就會被 git 視為不用追蹤的檔案:
# Ignore any js file in directory `sample` with any depth
samples/**/*.js
如果在當前目錄中有個 .gitignore 的內容如上,那當前目錄內的 samples 目錄裡的任何階層目錄中以 .js 結為的檔案或目錄都會被排除在 git 的追蹤清單內。
每個工具在規定 ignore 檔案的規則時或多或少都有點不同,但主要都以 .gitignore 的規則處理,因此這裡會說明 .gitignore 的規則,使我們對於 ignore 檔案的規則有個認識。
規則列表如下:
# 作為行開頭視為註解行,如果需要包含以 # 開頭的檔案或目錄,可以使用 \ 跳脫。例如: \#foo 會匹配 #foo 目錄或檔案。\ 表示不忽略。例如: f\ o\ o 會匹配 f o o 目錄或檔案。! 作為行開頭會被視為不要忽略的檔案或目錄,如果要忽略以 ! 開頭的檔案或目錄,需要以 \ 跳脫。例如: !.gitignore 會將 .gitignore 檔案或目錄排除在忽略清單中,另外像是 \!important!.txt 則會將 !important!.txt 包含在忽略清單中。/ 作為目錄區隔符號。
/ ,則會只會搜尋與 .gitignore 同層的目錄。例如: /foo 會對應 foo ,但不會對應 a/foo ,另外 foo/bar 會對應 foo/bar 但不會對應 a/foo/bar。/ 則會尋找任意層的目錄,不會尋找檔案。例如 foo/ 只會搜尋目錄 foo 不會包含檔案 foo 。* 與除了 / 外的所有字串相符。例如 *.js 會符合任意以 .js 結尾的檔案或目錄,另外 foo/* 會匹配目錄 foo 中所有的檔案及目錄。? 與除了 / 外的所有字元相符。例如 ?.js 符合 a.js 但不符合 sample.js 。[a-zA-z] 是範圍符號,與範圍設定的相符。例如 [a-c].js 符合 b.js 但不符合 d.js 。** 依照擺放位置有不同的效果:
** 後接著 / 表示任意層目錄。例如 **/foo 符合 foo 與 a/foo 。/ 後接著 ** 並且位於尾端,表示此目錄下的所有檔案及目錄。例如 foo/** 會包含 foo 中所有的檔案及目錄,但不會包含 a/foo 的內容。/ 之間擺放 ** 表示中間夾著零至多個目錄。例如 foo/**/sample.js 符合 foo/sample.js 、 foo/bar/sample.js 與 foo/bar/a/sample.js 。* 相連都依上列規則。/ 則會找尋所有層級目錄中是否有符合的檔案及目錄。例如: foo 會符合 /foo 與 a/foo 。.gitignore 規格,因此理解了 .gitignore 寫法,就可以知道大部分的 ignore 檔案設定方式。