『現學現忘』Git基礎 — 19、Git中忽略檔案

繁華似錦Fighting發表於2022-04-29

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檔案的習慣,以免將來誤提交這類無用的檔案。

參考:

相關文章