-「等!這檔先別上傳」,讓 Git 只記該記的,其他乖乖留在你電腦裡
你是不是也有過這種崩潰時刻?拉下別人新的 commit,結果 .env 資料庫密碼、連線用Token被看光、node_modules 直接塞爆硬碟。
「天啊!這些檔案根本不該進Git!」
別擔心,跟他說有以下這些方式,保證下次先擋住檔案、再優雅的commit。
1. .gitignore:全隊都看的「黑名單」
專案每次 build 都冒出一堆 dist/、*.log。A 同事 commit 了,B 同事 pull 下來氣到翻桌。
- 在專案根目錄新建一個檔名就叫 .gitignore。
- 把不想追蹤的路徑、檔名寫進去:
/dist/
*.log
.env
- 優點:跟著程式碼一起 version control,整個團隊自動遵守。
就像辦公室公告欄——貼好一次,大家都看得到。
2. 個人 .gitignore_global —— 自己的垃圾自己掃
macOS 的 .DS_Store、VSCode 的 *.code-workspace 每次都跟著跑進 commit,好煩!
怎麼做?
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 日誌。」
- 先把檔案名寫進 .gitignore。
- 執行:
git rm --cached .env
git commit -m "Stop tracking .env"
- .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. .gitattributes 的 export-ignore —— 打包時自動瘦身
你維護一個開源套件,上傳 GitHub Release 時,想把 tests/、docs/private/ 排除在 zip 檔之外。
在根目錄開 .gitattributes:
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 的資料。
打開稀疏模式
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
。
把意外降到最低
- 建立習慣:開新專案第一步就寫 .gitignore。
- 團隊同步:異動黑名單時,PR 說明「為何要忽略」,避免莫名其妙。
- 機密別僥倖:一旦誤 commit 密碼,立即換密鑰,別只刪檔就了事。
下次見到「欸!誰又把 log 檔推上來?」時,記得分享這篇