项目的代码放在 github 上,一开始的时候没有使用规范,所以很多 jar 文件也被提交上去,后来虽然在版本控制中删除了,但是 git 仓库中始终还有存在的,需要重新 clone 整个仓库的时候,耗费很长时间,所以需要对仓库进行清理.

先是翻了翻文档,Git 工具 - 重写历史

文档中称之为核弹级选项: filter-branch彻底吓尿。。

还好找到一篇文章,里面提到了一个工具bfg-repo-cleaner,最终搞定收工

首先clone 一个仓库镜像到本地

$ git clone --mirror git://example.com/some-big-repo.git

为了安全起见,最好再在本地复制一份

然后开始从官网下载 jar 包,就可以进行操作了,以下是一些例子

$ cd some-big-repo.git
#删除文件名为'id_rsa' 或者 'id_dsa'的文件
$ java -jar bfg-xxx.jar --delete-files id_{dsa,rsa}  my-repo.git
#删除所有 jar 文件
$ java -jar bfg-xxx.jar --delete-files "*.jar"  my-repo.git
#删除所有 log 文件
$ java -jar bfg-xxx.jar --delete-files "*.log"  my-repo.git
#删除文件大小大于1M 的文件
$ java -jar bfg-xxx.jar --strip-blobs-bigger-than 1M myrepo.git
#删除文件大小大于500k 的文件
$ java -jar bfg-xxx.jar --strip-blobs-bigger-than 500K myrepo.git

执行完毕之后可以在同级目录下的 myrepo.git.bfg-report中查看命令会删除的文件,如果删除了不该删除的文件,可以复制一份之前拷贝的目录,再重新处理。

删除文件文件之后清理缓存及其他垃圾文件,然后 push 到远程仓库

$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
$ git push

push 的时候可能会出现以下问题

[remote rejected] refs/pull/1/head -> refs/pull/1/head (deny updating a hidden ref)

不用理会,不影响本来的操作

参考:

http://blog.eood.cn/how-to-clean-up-git-repo

https://rtyley.github.io/bfg-repo-cleaner

Comments
Write a Comment