Git: 移除敏感資料
嚐到 GitHub 甜頭的凍仁漸漸把很多東西都塞進來,可過段時間就會發現很多大檔 (例如:deb, rpm, tar.gz ... 等 binary) 是不適合進到 Git 裡的。
它會增加 clone 的時間,除非是使用 LAN 裡的 Git server 否則凍仁不建議這樣使用。以下為凍仁刪除 binary 等大檔的筆記。
1. 從 remote repository 複製 Git 專案。
2. 切換至該專案目錄。
3. 從所有提交 (commit) 中刪除檔案 (pkg/*.deb 請自行修正)。
4. 清除快取和回收空間。
5. 強制覆寫並上傳至 remote repository。
6. 打完收工!現在我們可以有效的幫 repository 瘦身了。
依賴 Git 是件好事,但太過依賴是會適得其反的。
它會增加 clone 的時間,除非是使用 LAN 裡的 Git server 否則凍仁不建議這樣使用。以下為凍仁刪除 binary 等大檔的筆記。
1. 從 remote repository 複製 Git 專案。
[ jonny@wheezy ~ ]
$ git clone https://githuIb.com/chusiang/tuxENV.git [Enter]
2. 切換至該專案目錄。
[ jonny@wheezy ~ ]
$ cd tuxENV [Enter]
3. 從所有提交 (commit) 中刪除檔案 (pkg/*.deb 請自行修正)。
[ jonny@wheezy ~ ]
$ git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch pkg/*.deb' \
--prune-empty --tag-name-filter cat -- --all [Enter]
Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266)
# Ref 'refs/heads/master' was rewritten
4. 清除快取和回收空間。
[ jonny@wheezy ~ ]
$ rm -rf .git/refs/original/ [Enter]
$ git reflog expire --expire=now --all [Enter]
$ git gc --prune=now [Enter]
$ git gc --aggressive --prune=now [Enter]
5. 強制覆寫並上傳至 remote repository。
[ jonny@wheezy ~ ]
$ git push origin master --force [Enter]
6. 打完收工!現在我們可以有效的幫 repository 瘦身了。
[ jonny@wheezy ~ ]
$ du -sh [Enter]
2.7M .
依賴 Git 是件好事,但太過依賴是會適得其反的。
相關連結:
★ 移除 Git Repo 中的敏感資料… [solved] | Qoding Style
★ Git - 重寫歷史
★ git 倉庫分家
★ [ 凍@仁:/翔 ]$ 問 請問在 Git 裡加入大檔後有辨法刪除嗎? | Plurk
資料來源:
★ Remove sensitive data · GitHub Help
寫的很清楚,感謝了
回覆刪除寫得很詳細 感謝分享
回覆刪除雖然 我是用GUI 操作 的菜鳥
但是還是先備份 有需要再來使用
6 年後,同事與自己又再次被這篇心得給救了一次。感謝過去的自己所寫下的實戰筆記!
回覆刪除> https://www.facebook.com/chusiang.lai/posts/10214240337641666