[Git] gitignore

weixin_33670713發表於2016-08-10

官方文件
github gitignore 模板檔案
生成 gitignore 模板檔案的網站

基本介紹

gitignore 用來描述如何忽略那些不想讓 git 追蹤的檔案的規則。如果檔案已被 git 追蹤,那麼即使符合 gitignore 中的規則,檔案也不會被忽略。gitignore 檔案的每一行指定了一條對應規則,Git 會根據優先順序從不同的檔案源獲取 gitignore 忽略規則,優先順序由高到低分別是:

  1. git ls-filesgit read-tree等命令會從引數選項中讀取 gitignore 的內容。
  2. 而像git statusgit add等命令則是通過 .gitignore 檔案來獲取忽略規則。一個專案的每一級目錄都可以包含 .gitignore 檔案,檢查一個檔案是否應該被忽略就是根據其所在目錄的 .gitignore 檔案或其上級目錄的 .gitignore 檔案中的忽略規則。而多個 .gitignore 檔案中的優先順序是所在目錄中的最高,然後依次向上層遞減。跟專案相關的並且希望被克隆時也應包含的規則都應該寫在 .gitignore 檔案裡。
  3. 如果只是本地專案單獨應用的規則,可以寫在 .git/info/exclude 檔案中。
  4. 如果使用者希望系統中所有的git管理的專案都應用的規則,可以通過 git config --global core.excludesfile '' 命令設定一個系統全域性的過濾檔案。

過濾規則語法

  1. 空行不匹配任何檔案,可用作分割線,增強可讀性。
  2. 以 # 開頭作為註釋。
  3. 末尾的空格會被忽略,除非通過 \ 轉義。
  4. 通過 !開頭作取反操作,即如果之前的規則將檔案忽略,這條規則可以讓檔案重新被追蹤,因為效能的考慮,如果之前的規則使檔案所在的目錄整體被忽略,那麼無法使檔案重新被追蹤了。
  5. 最後加反斜線 /,只匹配目錄和其下面的檔案,不匹配該名稱的檔案。 如foo/ 不匹配foo檔案。
  6. 如果模式中沒有反斜線 /,則作為shell glob 模式並且相對於.gitignore檔案所在的目錄位置。所謂的 glob 模式是指 shell 所使用的簡化了的正規表示式。 * 匹配零個或多個任意字元,[abc] 匹配任何一個列在方括號中的字元,? 只匹配一個任意字元,[0-9] 表示所有在這兩個字元範圍內的都可以匹配。
  7. 以 / 開頭只匹配當前一級目錄,比如 "/*.c" 匹配 "cat-file.c",但不匹配 "mozilla-sha1/sha1.c"。
  8. 兩個連續的星號 **,匹配所有的路徑。

其他

停止已被跟蹤的檔案,可以使用 git rm --cached

相關文章