.git项目瘦身

有一个项目用git管理,因为误提交了一些大文件,java_pid*.hprof,及时发现删除了,但是导致.git目录大小1.1G,于是决定对其瘦身,瘦身是bfg方法,网上找开源了一个Java写的工具类,可以快速瘦身,具体参考BFG Repo-Cleaner by rtyley

git clone --mirror url

首先新建一个目录dir,进入目录执行,git clone --mirror ssh://git@aa:bb/cc/project.git,一直报错

Cloning into bare repository 'project.git'...
git@aa: Permission denied (publickey).
fatal: Could not read from remote repository.

电脑一直用的sourcetree,使用ssh助手(ssh-agent)加载配置的ssh key,一直可以,但是在git bash不行,于是重新生成配置ssh key到gitlab,还是不行,网上找到了解决方法:
在git bash执行:

ssh-agent.exe bash

加载配置到gitlab的ssh key:

ssh-add  /c/Users/cc/.ssh/240613_id_rsa

再执行

git clone --mirror ssh://git@aa:bb/cc/project.git
Cloning into bare repository 'project.git'...
remote:                                                                         
remote:              
Enumerating objects: 111291, done.
remote:              
remote:              
remote: Compressing objects: 100% (40643/40643), done.
kex protocol error: type 7 seq 714141), 1012.50 MiB | 10.96 MiB/s
Receiving objects: 100% (111291/111291), 1.06 GiB | 10.92 remote: Total 111291 (delta 50796), reused 111291 (delta 50796)
MiB/s, done.
Resolving deltas: 100% (50796/50796), done.

执行成功:
之后就是按照:BFG Repo-Cleaner by rtyley 来执行,

启动bfg-1.14.0.jar

首先把bfg.jar下载下来,放到project.git同级目录,执行

java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 100M project.git
…
…
BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive

这个是危险操作,具体按照上面的链接来操作,操作之前,最好进行备份,我是用gitlab先fork了project.git,然后才进行操作,原项目没有动,当做备份;
这个语句是找出超过100M的文件,进行删除,执行成功,提示你在git客户端执行另外一个方法,

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

执行完之后,执行

git push

执行完之后,重新拉取项目,就可以看到.git目录减少到了MB级别。

ONE MORE THING

最新的gitlab还支持其他方法,使用gitlab的同学,可以在这个位置找到操作方法
{url}/help/user/project/repository/reducing_the_repo_size_using_git.md

image.png

image.png

参考

Git之深入解析如何解决.git目录过大的问题-云社区-华为云 (huaweicloud.com)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容