从git中永久删除文件

有时候历史提交添加过比较大的文件或者敏感文件, 后面也删掉了, 可是git历史记录里面还有, 也会占用空间.
这时候就要用下面的方法来永久删除了.

  1. 运行底层命令git verify-pack以识别出大对象, 对输出的第三列信息即文件大小进行排序
$git verify-pack -v .git/objects/pack/pack-6d6...b0b.idx -v | sort -n -k 3 | tail -5
034...2c4 blob   8943 3472 21832
ec2...08b blob   11117 3081 29005
270...9e8 blob   12687 4841 14122
d57...91a blob   17888 5654 41757
829...3e7 blob   25644 5743 65787

或者直接看全部idx文件

$git verify-pack .git/objects/pack/pack-* -v | sort -n -k 3 | tail -10 | uniq
  1. 使用 rev-list 命令, 查看 blob 对应的文件名
$git rev-list --objects --all | grep 829...3e7
829...3e7 test_file
  1. 确认这个文件不需要的话, 就可以删除了
$git filter-branch --force --index-filter "git rm -rf --cached --ignore-unmatch test_file" --prune-empty --tag-name-filter cat -- --all

使用--tag-name-filter cat 更新 tag.
使用--all 保证全部被重写.

  1. 删除快取,回收空间
$rm -rf .git/refs/original && git reflog expire --expire=now --all
$git gc --prune=now
  1. 更新到远程服务器
$git push --force
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值