以前公司的一個(gè)項(xiàng)目代碼,從2014年一直存活到了2021年,目前應(yīng)該還在被使用。整個(gè)代碼將近2G,git文件極大,其中很大的一個(gè)原因是代碼里存放過(guò)apk文件。如此大的項(xiàng)目,導(dǎo)致下載、發(fā)布很困難。
最初打算創(chuàng)建一個(gè)新的遠(yuǎn)程倉(cāng)庫(kù)用來(lái)替換舊倉(cāng)庫(kù),但是該項(xiàng)目涉及的位置和使用者太多。另外一個(gè)方案是刪除apk的變更記錄,項(xiàng)目也會(huì)變小很多。此處推薦一個(gè)工具,能夠較快的刪除Git的歷史變更記錄。
一、創(chuàng)建倉(cāng)庫(kù)
創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù),里面有README.md文件,做兩次提交,分別提交數(shù)字1和數(shù)字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
如果沒(méi)有JAVA,則需要進(jìn)行安裝:
apt install default-jre
java -v
為了方便執(zhí)行,我們可以設(shè)置別名:
alias bfg='java -jar bfg-1.14.0.jar'
三、操作
1.刪除文件
為了刪除變更記錄,需要先刪除該文件。
2.下載遠(yuǎn)程倉(cāng)庫(kù)
創(chuàng)建新的目錄,將遠(yuǎn)程倉(cāng)庫(kù)下載下來(lái)
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
通過(guò)日志能夠看到刪除情況:
cd test.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push
通過(guò)git歷史,發(fā)現(xiàn)sha1值有變更,而且里面的改動(dòng)已經(jīng)消失了
四、總結(jié)
bfg的優(yōu)勢(shì)在于速度快,如果項(xiàng)目大是因?yàn)閹讉€(gè)大文件導(dǎo)致的,大家可以用這種方案進(jìn)行操作。
另外bfg的命令有很多,可以刪除文件、可以根據(jù)文件大小等刪除,我們可根據(jù)需求靈活使用。
資料
- 三種清除Git提交歷史的方法
- [因累積太多無(wú)法提交github,如何清除歷史變更記錄?](https://segmentfault.com/q/1010000004996998)
- 官網(wǎng)
最后
大家如果喜歡我的文章,可以關(guān)注我的公眾號(hào)(程序員麻辣燙)
我的個(gè)人博客為:
https://shidawuhen.github.io/