从git记录中删除大文件

git push error

大家一定遇到过在使用Git时,不小心将一个很大的文件添加到库中,即使删除,记录中还是保存了这个文件。以后不管是拷贝,还是push/pull都比较麻烦。今天将工程上传到github时,发现最大只能上传100MB大小文件,在本地git库中有一个260MB文件,虽然已经删除,但还保存了记录。下面教大家如何从库中彻底删除无效大文件。


  • 1.查看git空间使用

    git count-objects -v
    git空间使用情况
    其中size-pack就是.git的大小,单位字节。

  • 2.查看大文件是什么

    git verify-pack -v .git/objects/pack/pack-83eb93d4ad82019ee070697931cab9bb59fab7c4.idx | sort -k 3 -n | tail -3
    大文件列表

    简单说明:
    * 指令是git verify-pack -v xxx.idx,所以你需要定位到idx目录
    * sort -k 3 -n 按照第三列即文件大小列排序
    * tail -3  列举出前三条
    
  • 3.我们可以看到86d73c这个文件很大,下一步找到它是什么

    git rev-list --objects --all | grep 86d73c
    大文件名称

  • 4.将该文件从历史记录的所有 tree 中移除

    git log --pretty=oneline --branches – platforms.zip

  • 5.用 filter-branch 命令重写所有 commit 才能将文件从 Git 历史中完全移除

    git filter-branch -f --prune-empty --index-filter ‘git rm --cached --ignore-unmatch -fr platforms.zip’ – --all
    执行结果

  • 6.现在历史记录中已经不包含对那个文件的引用了。不过 reflog 以及运行 filter-branch 时 Git 往.git/refs/original 添加的一些 refs 中仍有对它的引用,因此需要将这些引用删除并对仓库进行 repack 操作。在进行 repack 前需要将所有对这些 commits 的引用去除。

    rm -Rf .git/refs/original
    rm -Rf .git/logs/
    git gc

至此结束。

清理结果





知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值