官方文檔
github gitignore 模板文件
生成 gitignore 模板文件的網站
基本介紹
gitignore 用來描述如何忽略那些不想讓 git 追蹤的文件的規則。如果文件已被 git 追蹤,那么即使符合 gitignore 中的規則,文件也不會被忽略。gitignore 文件的每一行指定了一條對應規則,Git 會根據優先級從不同的文件源獲取 gitignore 忽略規則,優先級由高到低分別是:
- 像
git ls-files
,git read-tree
等命令會從參數選項中讀取 gitignore 的內容。 - 而像
git status
,git add
等命令則是通過 .gitignore 文件來獲取忽略規則。一個項目的每一級目錄都可以包含 .gitignore 文件,檢查一個文件是否應該被忽略就是根據其所在目錄的 .gitignore 文件或其上級目錄的 .gitignore 文件中的忽略規則。而多個 .gitignore 文件中的優先級是所在目錄中的最高,然后依次向上層遞減。跟項目相關的并且希望被克隆時也應包含的規則都應該寫在 .gitignore 文件里。 - 如果只是本地項目單獨應用的規則,可以寫在 .git/info/exclude 文件中。
- 如果用戶希望系統中所有的git管理的項目都應用的規則,可以通過
git config --global core.excludesfile ''
命令設置一個系統全局的過濾文件。
過濾規則語法
- 空行不匹配任何文件,可用作分割線,增強可讀性。
- 以 # 開頭作為注釋。
- 末尾的空格會被忽略,除非通過 \ 轉義。
- 通過 !開頭作取反操作,即如果之前的規則將文件忽略,這條規則可以讓文件重新被追蹤,因為性能的考慮,如果之前的規則使文件所在的目錄整體被忽略,那么無法使文件重新被追蹤了。
- 最后加反斜線 /,只匹配目錄和其下面的文件,不匹配該名稱的文件。 如foo/ 不匹配foo文件。
- 如果模式中沒有反斜線 /,則作為shell glob 模式并且相對于.gitignore文件所在的目錄位置。所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式。 * 匹配零個或多個任意字符,[abc] 匹配任何一個列在方括號中的字符,? 只匹配一個任意字符,[0-9] 表示所有在這兩個字符范圍內的都可以匹配。
- 以 / 開頭只匹配當前一級目錄,比如 "/*.c" 匹配 "cat-file.c",但不匹配 "mozilla-sha1/sha1.c"。
- 兩個連續的星號 **,匹配所有的路徑。
其他
停止已被跟蹤的文件,可以使用 git rm --cached