以前公司的一個項目代碼,從2014年一直存活到了2021年,目前應該還在被使用。整個代碼將近2G,git文件極大,其中很大的一個原因是代碼里存放過apk文件。如此大的項目,導致下載、發布很困難。
最初打算創建一個新的遠程倉庫用來替換舊倉庫,但是該項目涉及的位置和使用者太多。另外一個方案是刪除apk的變更記錄,項目也會變小很多。此處推薦一個工具,能夠較快的刪除Git的歷史變更記錄。
一、創建倉庫
創建遠程倉庫,里面有README.md文件,做兩次提交,分別提交數字1和數字2。如下圖所示:
二、安裝工具
這款工具名為bfg,官方地址為:
https://rtyley.github.io/bfg-repo-cleaner/。
先下載jar文件到本地:
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar
如果沒有JAVA,則需要進行安裝:
apt install default-jre
java -v
為了方便執行,我們可以設置別名:
alias bfg='java -jar bfg-1.14.0.jar'
三、操作
1.刪除文件
為了刪除變更記錄,需要先刪除該文件。
2.下載遠程倉庫
創建新的目錄,將遠程倉庫下載下來
git clone --mirror git://example.com/some-big-repo.git
# git clone --mirror http://127.0.0.1:3000/shidawuhen/test.git
3.刪除指定文件
bfg --delete-files README.md test.git
通過日志能夠看到刪除情況:
cd test.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push
通過git歷史,發現sha1值有變更,而且里面的改動已經消失了
四、總結
bfg的優勢在于速度快,如果項目大是因為幾個大文件導致的,大家可以用這種方案進行操作。
另外bfg的命令有很多,可以刪除文件、可以根據文件大小等刪除,我們可根據需求靈活使用。
資料
- 三種清除Git提交歷史的方法
- [因累積太多無法提交github,如何清除歷史變更記錄?](https://segmentfault.com/q/1010000004996998)
- 官網
最后
大家如果喜歡我的文章,可以關注我的公眾號(程序員麻辣燙)
我的個人博客為:
https://shidawuhen.github.io/