Git Ignore

不想要檔案進入版本控制的七個方法 – Git

-「等!這檔先別上傳」,讓 Git 只記該記的,其他乖乖留在你電腦裡

你是不是也有過這種崩潰時刻?拉下別人新的 commit,結果 .env 資料庫密碼、連線用Token被看光、node_modules 直接塞爆硬碟。

「天啊!這些檔案根本不該進Git!」

別擔心,跟他說有以下這些方式,保證下次先擋住檔案、再優雅的commit。

1. .gitignore:全隊都看的「黑名單」

專案每次 build 都冒出一堆 dist/、*.log。A 同事 commit 了,B 同事 pull 下來氣到翻桌。

  • 在專案根目錄新建一個檔名就叫 .gitignore
  • 把不想追蹤的路徑、檔名寫進去:
Markdown
/dist/
*.log
.env
  • 優點:跟著程式碼一起 version control,整個團隊自動遵守。

就像辦公室公告欄——貼好一次,大家都看得到。


2. 個人 .gitignore_global —— 自己的垃圾自己掃

macOS 的 .DS_Store、VSCode 的 *.code-workspace 每次都跟著跑進 commit,好煩!

怎麼做?

Bash
touch ~/.gitignore_global           # 在自己的作業環境建一份私人黑名單

echo ".DS_Store" >> ~/.gitignore_global

git config --global core.excludesFile ~/.gitignore_global

從此 只對你的電腦有效,同事完全感受不到。


3. .git/info/exclude:專案內的祕密小抽屜

你在某專案做實驗,產生 big-test.csv,只想自己忽略,不想把規則寫到正式的 .gitignore,又不想大動干戈調整 .gitignore_global。

  • 路徑就在該專案底下的 .git/info/exclude(注意前面有 .git)。
  • 規則語法跟 .gitignore 一樣,檔案不會被 commit。

臨時忽略某些實驗檔、僅自己使用的產物。


4. git rm –cached —— 解除已追蹤檔的「緊箍咒」

老闆急著 demo,你一時手殘把 .env commit。醒悟後想說:「我不想刪檔,但也不想它再佔 Git 日誌。」

  1. 先把檔案名寫進 .gitignore
  2. 執行:
Bash
git rm --cached .env

git commit -m "Stop tracking .env"
  1. .env 仍在硬碟,但 Git 從此不再理它。

就像退訂 EDM,信還留在信箱,但之後不再收到。


5. -assume-unchanged / -skip-worktree:本機偷偷改、不吵到誰

指令白話適合情境
git update-index --assume-unchanged <檔案>「我很少改它,先別煩我」偶爾手改設定檔測試
git update-index --skip-worktree <檔案>「這檔常被工具重寫,別顯示變更」IDE 自動更新的 config

取消 時加 --no- 前綴即可:–no-assume-unchanged–no-skip-worktree

提醒:只有你的 Git 會裝死,推上遠端後同事還是照常運作。切 repo、抓新 clone 也會取消(失效)。


6. .gitattributesexport-ignore —— 打包時自動瘦身

你維護一個開源套件,上傳 GitHub Release 時,想把 tests/docs/private/ 排除在 zip 檔之外。

在根目錄開 .gitattributes

Markdown
tests/**          export-ignore
.github/**        export-ignore
README_dev.md     export-ignore

git archive 或 GitHub Release 下載的 Source Code 就會自動排除指定檔案。

  • 平常開發照樣追蹤;只有 git archive 或 GitHub 自動產生的 Source Code zip 才會忽略。

行李打包前先挑掉不穿的衣服,行李箱瞬間變輕。


7. Sparse Checkout —— 只把需要的資料夾簽出

公司有一個巨大 mono-repo,你只負責 frontend/,卻每天 clone 10GB 的資料。

打開稀疏模式

Bash
git sparse-checkout init --cone      # 開啟精簡模式

git sparse-checkout set frontend/    # 只要這個資料夾

其他巨量檔案不會出現在工作目錄,硬碟瞬間輕盈。

雖然不是「忽略 commit」,但能減少不必要檔案入眼,放進這篇讓你知道有招可用。

把「乾淨 commit」當日常習慣

  • 整個團隊都不該commit的產物.gitignore
  • 個人雜物 → 全域 ignore ~/.gitignore_global
  • 這個 repo 臨時用、不想 commit.git/info/exclude
  • 手滑已上傳git rm -—cached + .gitignore ,必要時用 git filter-repo 後悔藥清歷史。
  • 短暫測試assume-unchanged / skip-worktree
  • 專案打包發佈.gitattributes export-ignore
  • 超大倉庫不想全簽出,只取需要的部分sparse-checkout

把意外降到最低

  1. 建立習慣:開新專案第一步就寫 .gitignore。
  2. 團隊同步:異動黑名單時,PR 說明「為何要忽略」,避免莫名其妙。
  3. 機密別僥倖:一旦誤 commit 密碼,立即換密鑰,別只刪檔就了事。

下次見到「欸!誰又把 log 檔推上來?」時,記得分享這篇