文章时间: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