项目的代码放在 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