git 清理commit中历史提交记录的大文件
起源是公司需要把代码仓库同步到另外一个代码仓库,结果另外一个仓库被限制大文件超过64M提交,所以会同步失败。
刚开始我直接把大文件压缩到64m以内,结果还是同步失败。后来才知道是因为提交记录里面有包含大文件的信息也要删除才行。
具体操作方法:
- 通过ssh的方式配置仓库认证
- 下载工具bfg
网盘下载:网盘下载地址
官网下载:bfg-1.13.0.jar 官网下载地址
将程序包放到一个文件夹里,为了方便,重命名为bfg.jar
- 克隆仓库
git clone --mirror ssh://git@127.0.0.1:34/xxx/xxx.git
- 清理大文件,文件夹,隐私文件
知道大文件的名字是最好的,如果不知道也可以通过命令找到文件。详情看文末的 参考2 链接,里面有详细介绍。
通过如下命令找到git中保存的大小排名前5的大文件
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
清理命令
java -jar bfg.jar --delete-files 我是单个文件名字 hcses-warehouse.git --no-blob-protection
java -jar bfg.jar --delete-folders 我是文件夹的名字 hcses-warehouse.git --no-blob-protection
- 清理不需要的数据
在完成上面的指令后,实际上这些数据/文件并没有被直接删除,这时候需要使用git gc指令来清除。
cd xxx.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
- 推送到Git仓库
普通推送可能也会报错,我们可以使用强制推送。
git push
git push --force
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器