以前公司的一个项目代码,从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'
为了删除变更记录,需要先删除该文件。
创建新的目录,将远程仓库下载下来
git clone --mirror git://example.com/some-big-repo.git
# git clone --mirror http://127.0.0.1:3000/shidawuhen/test.git
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的命令有很多,可以删除文件、可以根据文件大小等删除,我们可根据需求灵活使用。
大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)
我的个人博客为:
https://shidawuhen.github.io/