欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > git清理--解决.git文件过大问题

git清理--解决.git文件过大问题

2025/4/21 22:18:47 来源:https://blog.csdn.net/wang_kmin/article/details/147348769  浏览:    关键词:git清理--解决.git文件过大问题

背景:为什么.git比我仓库中的文件大很多

        为什么我的git中只有一个1KB的README,但是.git却又1G多?当我想把这个git库push到gitee时,还会报错:

        根据报错信息,可看出失败的原因是:有文件的大小超过1G,超过了限流值:100M。但是,我的仓库中只有1K,为什么会有1G的文件呢?

        再回想一下,我之前曾提交过多个大文件,但是因为是无用的,就把它们都删了,并重新提交了,推测是跟这些提交有关,因为git能回退到某一版本,即能回退到删除文件之前的版本。那么,如果我误提交了一些大文件,该怎么从git中删除呢?

方案

        查看git占用磁盘大小:

git count-objects -vH

        松散对象size为1.34G,包对象size-pack为132.46M,总大小为1.47G。

1. 检查仓库中的大文件:

git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10

执行结果如下:

第三列即为文件的大小,第一列为SHA-1。

2. 关联SHA-1到对应的文件名

git rev-list --objects --all | grep {SHA-1}

执行结果如下:

        本例中,最大的文件是test_file,这是之前误提交的一个大文件,虽然已经删除,但是git中任然存储相应的记录。

3. 重写提交历史

安装git-filter-repo:

pip install git-filter-repo

将git-filter-repo添加到Path,我的路径在这:

C:\Users\ xxx\AppData\Roaming\Python\Python37\Scripts

清理test_file:

git filter-repo --path test_file --invert-paths --force

执行大概需要40s,结果如下:

4. 清理残留数据

git reflog expire --expire=now --all
git gc --prune=now --aggressive

执行完上述步骤之后,查看.git,发现还是很大,于是继续重复上述步骤,删除所有无效文件,最后结果:

可以看到,清理完成之后,文件大小只有1.35K了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词