git 删除远程文件_利用bfg(取代git filter-branch)来删除你git中的大文件的方式

当你想要从你的git repo中删除大量文件做过滤的时候,你第一个会想到的是git filter-branch,但是这个使用不方便加上速度不快,幸好我们迎来了killer工具 - bfg. 他不会真正的把这些文件从最新的commit中删除。下面是具体步骤:

首先你需要以--mirror的方式来git clone你的仓库

git clone --mirror git://example.com/your-repo.git

447c77c34b85ee3c2937fab85fce33b8.png

删除超过大于10MB的文件

bfg --strip-blobs-bigger-than 10M your-repo.git

删除最大的文件(N个)

bfg --strip-biggest-blobs 100 your-repo.git

这个命令会删除你仓库最大的100个文件

如果你指定给定文件的blob IDs你可以直接这些ID放在文本中让他删除

bfg --strip-blobs-with-ids blobs.txt your-repo.git

bfg的原理不是通过修改你head files来实现,而是调整你的历史,当然如果你不想破坏对应的分支,你可以使用--protect-blobs-from选项,比如

bfg --protect-blobs-from master,dev,stage --strip-biggest-blobs 100 your-repo.git

这个选项表示我虽然删除100MB的文件,但是不去破坏master,dev,stage这三个分支

这里之所以推荐bfg,除了他速度快之外,另外一个就是他的语法简单,考虑上面的场景,如果你要用git filter-branch的话,你需要写

git filter-branch --index-filter 'git rm --cached --ignore-unmatch dumpfile.sql' merge-point..HEAD

这个一对比就看出来哪个对程序员更加友好了

删除完对应的文件之后,需要去清理你的gc以及reflog:

cd your-repo.git git reflog expire --expire=now --all && git gc --prune=now --aggressive

PS:

他不会破坏你的last commit,比如你在last commit中加入了大文件,他的-b是不会起作用的,这个时候你可以考虑使用--amend等

743cf73dd564a59e790eae9f16c46813.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值