Git: 移除敏感資料

嚐到 GitHub 甜頭的凍仁漸漸把很多東西都塞進來,可過段時間就會發現很多大檔 (例如:deb, rpm, tar.gz ... 等 binary) 是不適合進到 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

留言

  1. 寫的很清楚,感謝了

    回覆刪除
  2. 寫得很詳細 感謝分享

    雖然 我是用GUI 操作 的菜鳥

    但是還是先備份 有需要再來使用

    回覆刪除
  3. 6 年後,同事與自己又再次被這篇心得給救了一次。感謝過去的自己所寫下的實戰筆記!

    > https://www.facebook.com/chusiang.lai/posts/10214240337641666

    回覆刪除

張貼留言

喜歡這篇文章嗎?歡迎在底下留言讓凍仁知道。😉

Popular Articles

sudo 指令使用說明