Git清理commit中历史提交的大文件

修改时间: 2019-11-10 16:58:00 PM

文章时间:2019年11月10日 14:02:59
解决问题:清理Git中比较大的文件,主要针对历史记录进行清理
ps:因为Git可以恢复版本,所有历史提交过的较大的文件,也会被保存下来,所以我们需要……xx嗯,你懂的。

这里方法有两种,下面方法主要介绍了其中一种

查看目录下的文件的大小

git count-objects -v # 查看 git 相关文件占用的空间
du -sh .git # 查看 .git 文件夹占用磁盘空间
du -d 1 -h  # 列出所有文件的大小

du是linux 的基础命令,很多用法,详情自己去查找其他文档。
因为git的历史文件都是存在一个文件里的,我们使用下面命令可以找出排名前五的文件

git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5

方法一 纯手动(小米+步枪)的方法

直接参考这篇教程即可,写的比较全面,比百度上很多废教程好多了。
记一次删除Git记录中的大文件的过程:https://www.hollischuang.com/archives/1708

方法二 工具化(自动机枪)

工具名称:BFG
工具地址:https://rtyley.github.io/bfg-repo-cleaner/

第一步 下载包文件

直接官网下载即可,bfg-1.13.0.jar
将程序包放到一个文件夹里,为了方便,重命名为bfg.jar

第二步 克隆仓库

clone自己的git repo,使用--mirror参数

git clone --mirror http://192.168.1.199:8099/hcses/hcses-warehouse.git

第三步 清除大文件,文件夹,隐私文件

这里官网给出的命令,可能会不行,我们继续添加参数。
删除文件和删除文件夹的命令

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 hcses-warehouse.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive

第五步 推送到GitHub

git push

这里普通推送可能也会报错,我们可以使用强制推送。

git push --force

添加新评论