Git清理commit中历史提交的大文件 - 云+社区 - 腾讯云


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


文章作者:   Joey Wang
版权声明:   本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Joey Wang !
 上一篇
kubectl技巧之通过jsonpath截取属性 - 周国通 - 博客园 kubectl技巧之通过jsonpath截取属性 - 周国通 - 博客园
系列目录 前面一节我们介绍了使用 go-template 截取属性, go-template 功能非常强大, 可以定义变量, 使用流程控制等, 这是 jsonpath 所不具备的. 然而, jsonpth 使用的时候更为灵活. 通过上一
2021-08-21 Joey Wang
下一篇 
macbook:  The headers or library files could not be found for zlib macbook: The headers or library files could not be found for zlib
问题: python 无法安装 pillow==7.1.2 报错: The headers or library files could not be found for zlib, 解决方案# 查找 zlib.h find /Libr
2021-08-15 Joey Wang
  目录