处理.git文件夹过大出现臃肿问题

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 历史大文件的首选工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/47776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32入门-----EXTI外部中断(下——实践篇)

目录 前言 一、硬件介绍 1.对射红外线传感器 2.旋转编码器 二、EXTI外部中断C编程 1.开启RCC时钟 2.配置GPIOK口初始化 3.配置AFIO 4.配置EXIT 5.配置NVIC 三、EXIT外部中断项目实操 1.对射红外传感器计数 2.选择编码器计数 前言 本期接着上一期的内容继续学习stm3…

DHCP中继实验

一、什么是DHCP中继? 1、使得一个DHCP服务器同时为多个网段服务称为DHCP中继技术。 2、配置DHCP中继的网络设备可以在不同网段上从DHCP总服务器获取IP地址分配给下面的各个主机。 3、路由器和交换机都可充当中继。DHCP中继在两个网段间代理客户端和服务器请求,中继服务器需要…

SEO需要了解的8大html标签

做SEO久了就会发现SEO不是一项单一的技术,它需要你懂得很多东西,绝不是文章外链那么简单,至少你要懂得基本的标html标签。 1、title标签 标题是搜索引擎重要的参考标签,占有举足轻重的权重。建议不要在标题标签出现过多的关键词…

postman双击打不开的解决方案

postman双击打不开的解决方案 深入再深入 于 2022-05-09 15:45:56 发布 阅读量3.1k 收藏 2 点赞数 4 文章标签: postman 版权 右键属性 安装路径 更新版本 回滚 问题排查 关键词由CSDN通过智能技术生成 解决方案: 右键-属性,复制安装路…

Git 代码管理面试59题(一)

1. 简述Github和Gitlab的区别? 参考回答: Github是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱。gitlab类似 github,一般用于在企业内搭建git私服,要自己搭环境。GitHub如果使用私有仓…

【数据集处理工具】根据COCO数据集的json标注文件实现训练与图像的文件划分

根据COCO数据集的json标注文件实现训练与图像的文件划分 一、适用场景:二、COCO数据集简介:三、场景细化:四、代码优势:五、代码 一、适用场景: 适用于一个常见的计算机视觉项目应用场景,特别是当涉及到使…

【漏洞复现】泛微e-cology9 WorkflowServiceXml SQL注入漏洞

文章目录 前言漏洞描述影响范围 漏洞复现nuclei脚本 安全修复 前言 泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 漏洞…

裸金属服务器

裸金属服务器(Bare Metal Server)是一种提供物理服务器硬件的云计算服务,与传统的虚拟化技术相对。在裸金属服务中,用户直接访问和控制物理服务器的硬件资源,而不通过虚拟化层。以下是裸金属服务器的一些关键特点&…

Oracle(9)什么是SGA(System Global Area)?

SGA(System Global Area,系统全局区)是Oracle数据库实例中的一块共享内存区,用于存储数据库实例运行时所需的数据和控制信息。SGA在实例启动时分配,实例关闭时释放。 主要组成部分 SGA由多个内存结构组成&#xff0c…

FFmpeg播放视频

VS2017FFmpeg6.2.r113110SDL2.30.5 1.下载 ShiftMediaProject/FFmpeg 2.下载SDL2 3.新建VC控制台应用 3.配置include和lib 4.把FFmpeg和SDL的dll 复制到工程Debug目录下,并设置调试命令 5.复制一下mp4视频到工程Debug目录下(复制一份到*.vcxproj同一目录…

Qt 实战(6)事件 | 6.3、自定义事件

文章目录 一、自定义事件1、自定义事件类型2、创建自定义事件类3、发送自定义事件4、处理自定义事件5、总结 前言: Qt 是一个跨平台的 C 图形用户界面应用程序开发框架,它广泛用于开发 GUI程序(注意:GUI的全称是Graphical User In…

系统架构设计师教程 第3章 信息系统基础知识-3.5 专家系统-解读

系统架构设计师教程 第3章 信息系统基础知识-3.5 专家系统(ES) 3.5.1 人工智能3.5.1.1 人工智能的特点3.5.1.2 人工智能的主要分支3.5.2 ES的概念3.5.2.1 ES 概述3.5.2.2 与传统程序的区别3.5.3 ES的特点3.5.4 ES的组成3.5.4.1 知识库3.5.4.2 综合数据库3.5.4.3 推理机3.5.4.…

Maven settings.xml 私服上传和拉取配置

公司内部自行开发的依赖包需要上传到maven私服时,可以在项目的pom.xml中配置,也可以在本地计算机的maven目录settings.xml中配置。本文讲述的是如何在settings.xml中进行配置。 场景:有两个maven私服,其中一个为公司的&#xff0…

21-22集 ESP32-IDF开发教程编译运行机器人对话工程-《MCU嵌入式AI开发笔记》

21集 ESP32-IDF开发教程-《MCU嵌入式AI开发笔记》 之前我们用了windows系统搭建了ESP-IDF的开发环境, 我们还是参考这个官方文档https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.1/esp32s3/get-started/index.html 同时我们也参考之前讲到的&#…

GIT--git clone fatal [文件过大或网络不稳定] [大型仓库]

GIT--git clone fatal 1 介绍1.1 原因分类1.2 文件过大或网络不稳定 2 分析3 操作3.1 指定克隆深度【浅克隆】3.2 分批次下载3.3 增大Git的HTTP POST缓冲区大小3.4 配置git的最低速度和最低速度时间(单位:秒)3.5 压缩3.6 过滤下载 git filter branch3.7 仅克隆一个分…

OJ-0718

示例1 input 3 1 1 1 output 0示例2 input 3 3 7 10 output 1示例3 input 4 3 7 10 16 output 3题解1&#xff1a;List {public static void main(String[] args) {Scanner in new Scanner(System.in);int num in.nextInt();List<Integer> list new ArrayList<…

【总结】nginx源码编译安装报错./configure: error: SSL modules require the OpenSSL library.

问题现象 源码编译安装nginx时&#xff0c;执行./configure …… --with-http_ssl_module 命令安装https模块&#xff0c;需要用到openssl&#xff0c;由于机器缺少openssl库&#xff0c;报如下错误。 …… checking for openat(), fstatat() ... found checking for getaddr…

开源模型应用落地-FastAPI-助力模型交互-进阶篇(三)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

Go网络编程-RPC程序设计

gRPC 通信 RPC 介绍 RPC, Remote Procedure Call&#xff0c;远程过程调用。与 HTTP 一致&#xff0c;也是应用层协议。该协议的目标是实现&#xff1a;调用远程过程&#xff08;方法、函数&#xff09;就如调用本地方法一致。 如图所示&#xff1a; 说明&#xff1a; Servi…

windows下安装启动运行MinIO

MinIO服务器本身是采用Go语言开发的&#xff1b; 编程操作MinIO服务器的客户端有很多&#xff1a; Go&#xff0c;Python&#xff0c;Java&#xff0c;.NET&#xff0c;JavaScript&#xff0c;Haskell&#xff0c;C 官方文档&#xff1a;https://min.io/docs/minio/linux/dev…