Table of contents
Open Table of contents
問題:誰該負責忽略 .idea?
用 JetBrains 產品(IntelliJ IDEA、WebStorm、GoLand 等)開專案時,會在專案目錄下建一個 .idea 目錄,存放 IDE 的專案設定檔。同樣地,VS Code 會產生 .vscode 目錄,macOS 會在每個資料夾留下 .DS_Store,Vim 會產生 .swp 暫存檔。
這些檔案都不該進版控,但問題是:該放在專案的 .gitignore 裡嗎?
答案是不該。專案的 .gitignore 應只包含與專案本身相關的忽略規則(如 node_modules/、dist/、.env),而非特定開發者的工具產物。不是每個團隊成員都用 JetBrains,把 .idea 放進 .gitignore 等於讓專案去適應個人的工具偏好。
正確做法是讓每位開發者自己設定 global gitignore。
設定方式
建立全域忽略檔案
建立一個全域的 gitignore 檔案(檔名和路徑可自訂):
touch ~/.gitignore_global
告訴 Git 使用這個檔案
git config --global core.excludesFile ~/.gitignore_global
這會在 ~/.gitconfig 中加入:
[core]
excludesFile = ~/.gitignore_global
編輯忽略規則
在 ~/.gitignore_global 中加入你個人開發環境會產生的檔案:
# JetBrains IDEs
.idea/
*.iml
# VS Code
.vscode/
# macOS
.DS_Store
.AppleDouble
.LSOverride
# Vim
*.swp
*.swo
*~
# Emacs
*~
\#*\#
.\#*
設定完成後,這些規則會自動套用到你電腦上的所有 Git 倉庫,不需要在每個專案的 .gitignore 重複設定。
運作原理
Git 在判斷是否忽略某個檔案時,會依照以下優先順序檢查:
- 命令列參數:
git add -f可強制加入被忽略的檔案 .gitignore(專案層級):隨專案版控,團隊共享.git/info/exclude(倉庫層級):僅限本地,不隨專案版控core.excludesFile(全域層級):你的個人設定,套用到所有倉庫
全域 gitignore 的優先順序最低,如果專案的 .gitignore 明確追蹤某個檔案,全域設定不會覆蓋它。
小結
| 層級 | 檔案 | 用途 | 共享範圍 |
|---|---|---|---|
| 專案 | .gitignore | 專案產物(node_modules/、dist/) | 團隊共享 |
| 倉庫 | .git/info/exclude | 個人在特定倉庫的忽略 | 僅自己 |
| 全域 | ~/.gitignore_global | 個人開發工具產物(.idea、.DS_Store) | 僅自己 |
原則很簡單:專案相關的放 .gitignore,個人工具相關的放 global gitignore。這樣團隊的 .gitignore 保持乾淨,每個人也不用擔心自己的 IDE 檔案意外被提交。