-「等!這檔先別上傳」,讓 Git 只記該記的,其他乖乖留在你電腦裡
你是不是也有過這種崩潰時刻?拉下別人新的 commit,結果 .env 資料庫密碼、連線用Token被看光、node_modules 直接塞爆硬碟。
「天啊!這些檔案根本不該進Git!」
別擔心,跟他說有以下這些方式,保證下次先擋住檔案、再優雅的commit。
.gitignore
:全隊都看的「黑名單」專案每次 build 都冒出一堆 dist/、*.log。A 同事 commit 了,B 同事 pull 下來氣到翻桌。
.gitignore
。/dist/
*.log
.env
就像辦公室公告欄——貼好一次,大家都看得到。
.gitignore_global
—— 自己的垃圾自己掃macOS 的 .DS_Store、VSCode 的 *.code-workspace 每次都跟著跑進 commit,好煩!
怎麼做?
touch ~/.gitignore_global # 在自己的作業環境建一份私人黑名單
echo ".DS_Store" >> ~/.gitignore_global
git config --global core.excludesFile ~/.gitignore_global
從此 只對你的電腦有效,同事完全感受不到。
.git/info/exclude
:專案內的祕密小抽屜你在某專案做實驗,產生 big-test.csv,只想自己忽略,不想把規則寫到正式的 .gitignore,又不想大動干戈調整 .gitignore_global。
.git/info/exclude
(注意前面有 .git
)。.gitignore
一樣,檔案不會被 commit。臨時忽略某些實驗檔、僅自己使用的產物。
git rm --cached
—— 解除已追蹤檔的「緊箍咒」老闆急著 demo,你一時手殘把 .env commit。醒悟後想說:「我不想刪檔,但也不想它再佔 Git 日誌。」
.gitignore
。git rm --cached .env
git commit -m "Stop tracking .env"
.env
仍在硬碟,但 Git 從此不再理它。就像退訂 EDM,信還留在信箱,但之後不再收到。
-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 也會取消(失效)。
.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 才會忽略。行李打包前先挑掉不穿的衣服,行李箱瞬間變輕。
公司有一個巨大 mono-repo,你只負責
frontend/
,卻每天 clone 10GB 的資料。
打開稀疏模式
git sparse-checkout init --cone # 開啟精簡模式
git sparse-checkout set frontend/ # 只要這個資料夾
其他巨量檔案不會出現在工作目錄,硬碟瞬間輕盈。
雖然不是「忽略 commit」,但能減少不必要檔案入眼,放進這篇讓你知道有招可用。
.gitignore
。~/.gitignore_global
。.git/info/exclude
。git rm -—cached
+ .gitignore
,必要時用 git filter-repo 後悔藥清歷史。assume-unchanged
/ skip-worktree
。.gitattributes export-ignore
。sparse-checkout
。下次見到「欸!誰又把 log 檔推上來?」時,記得分享這篇
原文發佈於: