Git 檔案忽略:使用 .gitignore、.git/info/exclude 與全域忽略設定
Git 允許使用者在三個不同層級上忽略檔案:專案層級、儲存庫本機層級,以及使用者全域層級。這種分層方式讓開發者能將共享的專案需求與個人工作流程偏好、機器特定的作業系統雜訊分開管理。
使用 .gitignore 進行專案層級忽略
.gitignore 是忽略應從所有貢獻者的儲存庫中排除的檔案的標準方法。由於此檔案會被提交至版本控制,任何加入的模式都會套用到每一個克隆該儲存庫的人。
此檔案最適合用於:
- 建置輸出(例如
/dist、/bin) - 相依性資料夾(例如
node_modules/) - 專案特定的暫存檔案
使用 .git/info/exclude 進行儲存庫本機層級忽略
對於需要在特定儲存庫中忽略,但不應與其他協作者共享的檔案,Git 提供了 .git/info/exclude 檔案。此檔案位於 .git 目錄內,且不會被版本控制追蹤。
這是放置個人筆記、僅本機使用的腳本或自訂 Makefile(僅對單一專案的特定開發者工作流程有意義)的理想位置。正如一位貢獻者所說:
I use the ever living hell out of .git/info/exclude. Works great for scripts/Makefiles I only want locally and collaborators wouldn’t care about or be able to use.
使用 ~/.config/git/ignore 進行使用者全域層級忽略
若要在機器上的每個 Git 儲存庫中忽略檔案,開發者可以使用全域忽略檔。預設情況下,該檔案位於 ~/.config/git/ignore。
全域忽略最適合用於 OS 特定的檔案或 IDE 設定,這類檔案會出現在每個專案中,例如 macOS 的 .DS_Store。使用全域忽略可避免這些檔案佔滿專案層級的 .gitignore。
自訂全域忽略檔路徑
如果想使用預設以外的路徑,可以透過以下指令自訂全域忽略檔:
git config --global core.excludesFile ~/.gitignore_global
若要恢復預設設定,執行:
git config --global --unset core.excludesFile
請注意,在 Git 的術語中,--global 指的是目前使用者的設定,而非整個系統。系統層級的設定通常位於 /etc。
使用 git check-ignore 偵錯被忽略的檔案
當多個忽略檔同時生效時,可能難以判斷是哪一個檔案負責排除特定檔案。git check-ignore -v 指令會顯示造成忽略的確切檔案與行號。
範例輸出:
- 專案層級:
.gitignore:1:.DS_Store .DS_Store - 本機層級:
.git/info/exclude:7:.DS_Store .DS_Store - 全域層級:
/Users/nelson/.config/git/ignore:2:.DS_Store .DS_Store
如果檔案沒有被忽略,指令將不會產生任何輸出。
進階替代方案與補充工具
除了標準的忽略機制外,Git 也提供其他工具來管理檔案雜訊與設定:
使用 .gitattributes 抑制差異顯示
雖然 .gitignore 可防止檔案被追蹤,.gitattributes 則可用來忽略已追蹤檔案的差異。例如,在 .gitattributes 中加入 package-lock.json -diff,即可在 git diff 時隱藏該檔案龐大且常雜訊的差異,同時仍允許其被提交。
針對遠端的條件設定
Git 支援在設定檔中使用條件包含,允許根據遠端 URL 或儲存庫目錄位置套用不同設定。這對於在工作與個人專案之間管理不同的電子郵件地址或其他設定非常有用。
用於二進位檔案的 pre‑commit Hook
若要阻止二進位檔案或超過特定大小的檔案,有些開發者建議使用全域 Hook 目錄(git config --global core.hooksPath ~/.config/git/hooks)來實作 pre‑commit 檢查,而不是僅依賴忽略檔。
摘要: Git 提供三個不同層級的檔案忽略機制——專案層級(.gitignore)、儲存庫本機層級(.git/info/exclude)以及使用者全域層級(~/.config/git/ignore)——讓開發者在不汙染共享設定的情況下管理未追蹤檔案。
標題: Git 檔案忽略:使用 .gitignore、.git/info/exclude 與全域忽略設定