git服务器+查文件大小,git仓库大文件清理

png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAA1JREFUCJljePfx038ACXMD0ZVlJAYAAAAASUVORK5CYII=

新同事拉取仓库代码,结果报错pack - out of memory,我们是自己搭建的gitlab,一查服务器的仓库大小,文件有一个多G的大小,拉取代码时,服务器内存直接撑爆了,这就很奇怪了,因为我们的这个项目正常10M之内,这么大肯定是有问题的。

查了一下,发现是某个日志文件,每次提交100M,提交的次数过多,导致容量暴增,但是这个日志文件是可以忽略的,所以就需要把这个文件清理掉。如果你也是这种情况,可以查看后面的教程

git自带的命令和第三方工具,你可以选择任一方式进行处理

一、git自带的命令

1.1、找出提交过的大文件,这里列举出前5个git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"

1.2、删除指定大文件的提交记录

并不是全部删除所有的大文件,你要确认这个大文件是没用的,然后再指定删除,例如大文件的名字叫dawenjian.zip,命令就是下面这个git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch dawenjian.zip' --tag-name-filter cat -- --all

1.3、清理缓存git reflog expire --expire=now --all && git gc --prune=now --aggressive

1.4、强制提交(有风险)

因为要用本地修改过的记录去覆盖,所以需要强制提交本地修改git push origin --force --all

在gitlab中,master默认是保护的分支,可能强制提交会报错protected之类的,这样需要先去后台把protected的分支关闭掉保护,然后再强制提交

二、使用工具

依赖于java运行环境,如果未按照java的运行环境,需要先安装,然后将该脚本下载到本地,修改文件名为bfg.jar,命令行里面的bfg.jar都要带路径的。首先进入的仓库cd some-big-repo.git

2.1、找出提交过的大文件,这里列举出前5个git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"

也可以使用该工具自带的命令行,例如查找100M以上的文件java -jar /Users/damon/Downloads/bfg.jar --strip-blobs-bigger-than 100M

2.2、删除指定大文件的提交记录

并不是全部删除所有的大文件,你要确认这个大文件是没用的,然后再指定删除,例如大文件的名字叫dawenjian.zip,命令就是下面这个java -jar /Users/damon/Downloads/bfg.jar --delete-files dawenjian.zip hcses-warehouse.git --no-blob-protection

2.3、清理缓存git reflog expire --expire=now --all && git gc --prune=now --aggressive

2.4、强制提交(有风险)

因为要用本地修改过的记录去覆盖,所以需要强制提交本地修改git push origin --force --all

在gitlab中,master默认是保护的分支,可能强制提交会报错protected之类的,这样需要先去后台把protected的分支关闭掉保护,然后再强制提交

三、结束

如果操作一个分支没反应,可以试试切换不同的分支全部来一波。操作之前提前备份哦~

参考链接版权属于:胡东东博客

自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!

☟☟如文章有用,可点击一次下方广告支持一下☟☟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值