『現學現忘』Git基礎 — 19、Git中忽略文件

1、忽略文件說明

有些時候,你必須把某些文件放到Git工作目錄中,但又不能提交它們到本地版本庫,通常都是些自動生成的文件、日誌文件、系統快取文件、編譯過程中創建的臨時文件,或者保存了資料庫密碼的配置文件、人隱私文件等等,每次執行git status命令時,都會顯示Untracked files ...(未被跟蹤),有強迫症的童鞋心裡肯定不爽。

正常來說,這些文件都是不應該被提交到版本庫,倘若一不留神提交到版本庫,要麼泄露機密資訊,要麼造成經濟損失,要麼對團隊其他人工作造成不便。

好在Git考慮到了大家的感受,這個問題解決起來也很簡單,在Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,並且把.gitignore文件提交到本地版本庫中。之後Git就會自動忽略這些文件,再運行git status命令時就不對其進行檢測了。

即:”並不是所有的牛奶都叫特侖蘇”,在版本控制系統中也有相似的表達,那就是”並不是所有的文件都需要提交到本地版本庫”。

2、忽略文件的原則

  1. 忽略作業系統自動生成的文件,保持項目在不同作業系統中的純粹性和整潔度。
  2. 忽略編譯生成的中間文件、可執行文件等,比如Java編譯產生的.class文件,
    即:忽略工具軟體自動生成的文件,避免因個性化配置而產生的工作障礙。
  3. 忽略自己帶有敏感資訊的配置文件,比如存放口令的配置文件。

目標:只提交必要文件,忽略無用文件,儘可能考慮多種情況,不給他人製造麻煩。

3、.gitignore忽略規則

文件 .gitignore 的格式規範如下:

  • 所有空行或者以 # 開頭的行都會被 Git 忽略。
  • 可以使用標準的glob模式匹配,它會遞歸地應用在整個工作區中。
  • 匹配模式可以以(/)開頭,防止遞歸。
  • 匹配模式最後跟/說明要忽略的是目錄。
  • 要忽略指定模式以外的文件或目錄,可以在模式前加上嘆號(!)取反。

所謂的glob模式是指shell所使用的簡化了的正則表達式。

  • 以#開頭的行用作注釋。
  • 星號(*)匹配零個或多個任意字元。
  • [abc]匹配任何一個列在方括弧中的字元 (這個例子要麼匹配一個a,要麼匹配一個b,要麼匹配一個 c);
  • 問號(?)只匹配一個任意字元。
  • 如果在方括弧中使用短劃線分隔兩個字元, 表示所有在這兩個字元範圍內的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的數字)。
  • 使用兩個星號(**)表示匹配任意中間目錄,比如 a/**/z 可以匹配 a/za/b/za/b/c/z 等。

我們再看一個 .gitignore 文件的例子:

# 1.忽略public下的所有目錄及文件
/public/*

# 2.不忽略/public/assets,就是特例的意思,assets文件不忽略
!/public/assets

# 3.忽略具體的文件
index.html

# 4.忽略所有的java文件
*.java

# 5.忽略 a.java b.java
[ab].java

# 6.忽略 doc/ 目錄及其所有子目錄下的 .pdf 文件
doc/**/*.pdf

# 7.忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 8.忽略任何目錄下名為 build 的文件夾
build/

# 9.只忽略當前目錄下的 TODO 文件,而不忽略 subdir/TODO文件
/TODO

提示:要養成一開始就為你的新倉庫設置好.gitignore文件的習慣,以免將來誤提交這類無用的文件。

參考: