有一个项目用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
![](https://img.haomeiwen.com/i2219799/c37b67c7fbddc79e.png)
![](https://img.haomeiwen.com/i2219799/b3b32816f5c6b945.png)
网友评论