背景及问题
近期公司需要将一系列项目从SVN迁移至Git,使用git-svn迁移完成后发现Git仓库过大, git clone无法成功,提示错误:fatal: pack has bad object at offset XXX: inflate returned -5。
解决思路
在尝试使用 git clone --depth 1 xxx.git 进行浅克隆后,执行git fetch --unshallow时依旧失败。
在浅克隆的方案失败后,决定开始尝试减少仓库体积。执行 git count-objects -vH 结果如下:
git count-objects -vH
count: 4783
size: 1.33 GiB
in-pack: 73466
packs: 25
size-pack: 4.99 GiB
prune-packable: 11
garbage: 0
size-garbage: 0 bytes
可以明显的看到使用git-svn将项目SVN迁移至Git后包文件非常大。
此前使用SVN时,项目组将程序升级包和相关文档等二进制文件也纳入了版本控制,从而导致使用git-svn迁移至Git后代码仓库迅速膨胀。git-lfs插件提供了管理大文件的解决方法,但是综合考虑还是决定采用官方推荐的 git-filter-repo来进行历史重写,Git仓库仅管理代码文件,相关二进制文件依旧使用SVN管理。git-filter-repo的使用方法就不在此赘述,有兴趣的同学可以自行了解。