处理.git文件夹过大出现臃肿问题
创始人
2024-12-28 15:40:31
0

1、问题背景

在软件开发过程中,版本控制是一个至关重要的环节。Git 作为一种流行的分布式版本控制系统,被广泛应用于各种项目中。然而,近期我们发现在进行项目发版时,Git 克隆项目的时间显著增加,严重影响了发版的效率。经过分析,我们发现问题主要出在项目文件过大,导致克隆过程缓慢。

原因:开发误操作上传Jar包,导致项目变大,后面就算删除jar,但是有commit记录,依旧导致文件过大。
正常大小:226M
异常大小:2.6GB

2、环境介绍

  • 项目名称: xxxx_adc_backend
  • 代码托管平台: GitLab
  • 主要分支: pre-fjfsim
  • 清理工具: BFG Repo-Cleaner

3、清理原因

在开发过程中,项目中引入了一些大文件,这些文件不仅增加了代码库的体积,还影响了代码的推送和拉取效率。为了提高项目的整体性能和维护性,我们决定采用 BFG Repo-Cleaner 进行清理。

4、清理步骤

1. 开发人员禁止推送代码

在开始清理之前,需要确保所有开发人员停止推送代码,避免在清理过程中产生新的提交。

2. 运维备份代码

运维人员需要对 xxxx_adc_backend 项目进行备份,以便在清理过程中出现问题时可以快速回滚。
在这里插入图片描述

3、查询大文件记录

参考文档:https://blog.csdn.net/cysear/article/details/102823671
注意:记录是commit中,最好定位到有问题的分支,在问题分支上操作。比如我的大文件记录,在pre-fjfsim 上,所以我指定的是 pre-fjfsim

#克隆仓库的镜像 git clone --mirror -b pre-fjfsim git@gitlab.fujfu.com:ownit/ownit_test.git 
  • git clone --mirror:克隆仓库的镜像。镜像克隆会克隆所有分支和标签,但不会克隆工作目录和历史记录。
  • -b pre-fjfsim:指定克隆的分支为 pre-fjfsim

  • git@gitlab.fujfu.com:ownit/ownit_test.git:仓库的 URL。

#查找大文件的 SHA-1 哈希值 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" 

在这里插入图片描述

  • git rev-list --objects --all:列出所有对象的 SHA-1 哈希值。
  • grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" 

    :这部分是一个复杂的管道命令,用于过滤出大文件的 SHA-1 哈希值。

    • git verify-pack -v .git/objects/pack/*.idx:验证打包文件,并显示每个对象的详细信息。
    • sort -k 3 -n:根据第三列(文件大小)进行数字排序。
    • tail -5:显示排序后的最后五行,通常是最大的五个文件。
    • awk '{print$1}':打印每行的第一个字段,即 SHA-1 哈希值。
    • grep:使用这些 SHA-1 哈希值作为搜索模式,从 git rev-list --objects --all 的输出中过滤出相关的对象。

4、使用 BFG 清理大文件

BFG Repo-Cleaner 是一个高效的工具,可以帮助我们快速清理 Git 历史中的大文件。以下是具体的清理步骤:
参考记录:https://rtyley.github.io/bfg-repo-cleaner/

克隆项目
git clone --mirror -b pre-fjfsim git@gitlab.xxxx.com:ownit/ownit_test.git 
清除大文件
java -jar bfg.jar --delete-files xxxx_adc_backend_mac.tgz ownit_test.git java -jar bfg.jar --delete-files xxxx_adc_backend_mac_2024_0202.tgz ownit_test.git 

在这里插入图片描述

删除文件重构索引
cd ownit_test git reflog expire --expire=now --all && git gc --prune=now --aggressive 
查看容量
git count-objects -vH 
更新远程
git push -f 

5、开发人员检查

清理完成后,开发人员需要检查代码库是否正常。如果一切正常,则可以继续推送代码。如果发现异常,可以根据备份代码进行回滚。

5、总结

通过这次清理,我们成功地从 xxxx_adc_backend 项目中移除了不必要的大文件,不仅减轻了代码库的负担,还提高了代码管理的效率。BFG Repo-Cleaner 以其高效和稳定性,成为了我们清理 Git 历史大文件的首选工具。

相关内容

热门资讯

七分钟了解!闲娱棋牌有挂吗,w... 七分钟了解!闲娱棋牌有挂吗,wepower德州都是真的有挂,必备教程(有挂脚本);进入游戏-大厅左侧...
2分钟科普!雀神微信小程序怎么... 2分钟科普!雀神微信小程序怎么开挂,aaPOKER确实是真的有挂,玩家教你(有挂教学)1、点击下载安...
九分钟辅助!决战卡五星游戏辅助... 九分钟辅助!决战卡五星游戏辅助器,德州俱乐部果然有挂,详细教程(有挂揭秘)暗藏猫腻,小编详细说明决战...
8分钟辅助挂!财神十三张特殊牌... 8分钟辅助挂!财神十三张特殊牌外 挂,we-poker原来有挂,新2025版(有挂教学)1、每一步都...
7分钟辅助挂!台州宝宝游戏外 ... 7分钟辅助挂!台州宝宝游戏外 挂,鱼扑克app俱乐部切实是有挂,安装教程(有挂辅助挂)1、任何台州宝...
一分钟实锤!闲逸碰胡黑科技,哈... 一分钟实锤!闲逸碰胡黑科技,哈糖大菠萝十三张一直真的是有挂,微扑克教程(有挂软件)运闲逸碰胡黑科技辅...
六分钟辅助!微信小程序广丰51... 六分钟辅助!微信小程序广丰510k有挂吗,菠萝德州app切实是有挂,AA德州教程(有挂详情)1、起透...
五分钟普及!中至万年麻将有挂吗... 五分钟普及!中至万年麻将有挂吗,德州俱乐部一直是有挂,可靠技巧(有挂普及);该软件可以轻松地帮助玩家...
8分钟发现!葫芦娃捉鸡是真的吗... 8分钟发现!葫芦娃捉鸡是真的吗,红龙poker切实是有挂,科技教程(有挂神器)该软件可以轻松地帮助玩...
4分钟了解!大唐麻将有什么规律... 4分钟了解!大唐麻将有什么规律吗,德扑其实是真的有挂,教你攻略(有挂方法);1、实时大唐麻将有什么规...