使用bfg快速清理git历史大文件

使用bfg快速清理git历史大文件

之前写过一篇的,使用的git命令清理的大文件,但是我3G多的git,.git文件夹里面的pack就3G多,而且是个好几年并且在持续开发的项目,里面的提交成千上万了,每次使用git filter-branch,都要好几个小时,我研究了一下,要彻底清理项目中的那一堆大文件,只要要用脚本连续跑两天。。。
最近发现了一个方案,使用bfg,我仅仅十几分钟就处理完了
原先的方案:https://blog.csdn.net/qq_36254947/article/details/108601940

步骤

  • 解除保护分支
    默认情况下,git项目是有一个保护分支的
    在这里插入图片描述

image-20200911181110097

  • 拉取代码

注意:需要ssh拉取,http不行(ssh拉取需要配置ssh密钥)
git配置ssh密钥

git clone --mirror git项目的ssh地址
# 拉取的是 项目名.git  文件夹,这是Git项目中的.git文件夹
  • 查看大文件
# 进入项目文件夹
cd xxx.git
# 查询大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"
# tail -n 代表查看前n个大文件,
  • 清理文件夹
java -jar bfg-1.13.0.jar --delete-folders 清理的文件夹名字  本地git项目地址 
# 注意:文件夹名字,而不是文件夹路径,要小心别把其他文件夹中的同名的文件夹删除了
# 若是jar包放到了 git项目中,不需要添加  本地git项目地址 ,但最好不要放到.git文件夹中
  • 清理文件
java -jar bfg-1.13.0.jar --delete-files 删除的文件名 本地git项目地址
# 注意:这是文件名只是名字部分,不包含路径
  • 清理无效文件
# 删除的文件和文件夹,需要这一步才会真正清除
git reflog expire --expire=now --all && git gc --prune=now --aggressive
  • 查看大小
git count-objects -vH 
# 此时就能发现项目小了
  • 推送
git push -f  # -f 强制推送

脚本

# 开始
time1=$(date)
echo 开始时间 $time1

echo 拉取项目
git clone --mirror git@1xxxx.git
jarpach="D:\test1\bfg-1.13.0.jar"  # jar包地址

cd "D:\转换\test1\xxx.git"  # git项目地址

git count-objects -vH
echo 
echo 
echo 
echo 清理文件提交
echo 
# 将需要清理的文件列出来
java -jar $jarpach --delete-folders 文件夹1		
java -jar $jarpach --delete-folders 文件夹2
java -jar $jarpach --delete-files dist.*
java -jar $jarpach --delete-files 文件2

echo 
echo 

echo 清理无效文件
echo git reflog expire --expire=now --all && git gc --prune=now --aggressive
echo 
echo 
echo 清理完成

git count-objects -vH

echo 
time2=$(date)
echo 开始时间 $time1 ---结束时间 $time2

清理完之后,若是没有问题,进入项目文件夹使用git push -f 强制推送即可,之后别忘记清理服务器

在这里插入图片描述
在这里插入图片描述

清理服务器

清理完文件之后,需要清理一下服务器

#从git服务器进入这个项目的.git文件夹
cd /var/opt/gitlab/git-data/repositories/xx/.git  #根据配置可能不同
# 清理文件
git gc --prune=now --aggressive
#查看大小
git count-objects -vH

注意:我清理完之后,git服务器使用http不能拉取代码了,重启服务器解决了

posted @ 2021-07-09 16:44  紫月java  阅读(326)  评论(0编辑  收藏  举报