Git仓库瘦身大作战:133M 到 4M 的实战

开局两张图

瘦身前瘦身后

目录

  • 开局两张图
  • 前言
  • 下载 BFG
  • 克隆代码
  • Git 仓库瘦身
    • 清理存储库
    • 储存库 GC
    • 推送仓库
  • Git 瘦身验证
  • 结语
  • 开源项目

前言

在进行项目开发的过程中,代码仓库的体积可能会逐渐增大,特别是在版本控制系统中保留了大量的历史提交记录和不必要的文件。为了减小仓库的体积,提高代码仓库的整体性能,我们可以通过一些工具来进行仓库瘦身操作。下面是一组图片,展示了一个示例项目在瘦身前后的效果。

下载 BFG

首先,我们需要下载BFG Repo-Cleaner工具。可以在临时文件夹中新建一个文件夹(例如D:\Temp),然后通过以下链接下载 BFG Repo-Cleaner

https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar

克隆代码

在下载BFG之后,我们需要克隆远程Git仓库。打开文件夹 D:\Temp,右键选择 Git Bash Here,然后执行以下命令来克隆远程仓库:

git clone --mirror https://gitee.com/youlaiorg/vue3-element-admin.git

这将在当前文件夹中创建一个名为 vue3-element-admin.git 的裸仓库。

查看下瘦身前的文件大小

Git 仓库瘦身

🌈参考官网:https://rtyley.github.io/bfg-repo-cleaner/

清理存储库

使用 BFG Repo-Cleaner 可以删除一些不必要的文件,以减小仓库的体积。以下是一些清理操作的示例:

  • 删除超过 1MB 的文件:
java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 1M vue3-element-admin.git

  • 删除特定文件夹(例如.vscode):
java -jar bfg-1.14.0.jar --delete-folders .vscode vue3-element-admin.git
  • 删除特定文件(例如package-local.json):
java -jar bfg-1.14.0.jar --delete-files package-local.json vue3-element-admin.git

储存库 GC

清理操作会更新提交历史,但并不会物理删除不需要的内容。为了彻底删除不需要的数据,我们需要运行Git的垃圾收集命令:

cd vue3-element-admin.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive

推送仓库

完成清理和储存库 GC 之后,将更新后的仓库推送到远程仓库:

cd vue3-element-admin.git
git push

Git 瘦身验证

重新克隆代码,然后运行以下命令来查看仓库的大小:

git count-objects -vH

结语

通过 BFG Repo-Cleaner 工具,我们成功地瘦身了 Git 仓库,减小了仓库的体积。这样不仅有助于提高代码仓库的性能,还能节省存储空间,使代码管理更加高效。在项目开发中,定期进行仓库瘦身是一个良好的实践,可以保持仓库的健康状态。

开源项目

  • 微服务商城项目
GithubGitee
开源组织有来开源组织有来开源组织
后端youlai-mall 📖youlai-mall 📖
前端mall-admin🌎mall-admin 🌎
移动端mall-app 🌎mall-app 🌎
  • 前后端分离项目
GithubGitee
开源组织有来开源组织有来开源组织
后端youlai-boot 📖youlai-boot 📖
前端vue3-element-admin 🌎vue3-element-admin 🌎# 开源项目

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

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

相关文章

搜索引擎---项目测试

一)项目背景: 首先介绍一下项目:项目的目标是实现一个基于JAVAAPI的站内搜索引擎 java官方文档是在学习java语言中不可或缺的权威资料,相比于各种网站的Java资料,官方文档无论是语言表达还是组织方式都要更加全面和准确,因为没有人比作者更加…

【计算机网络笔记】数据链路层——差错编码

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志文件配置

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志文件配置 前言 在 Python 的logging模块中,它不仅提供了基础的日志功能,还拥有一系列高级配置选项来满足复杂应用的日志管理需求。 说到logging 模块的高级配置,必须提及日…

OpenCV- 学习笔记(Python)图像处理基础

本专栏:主要记录OpenCV(Python)学习笔记 OpenCV 图像处理基础 灰度图 import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline ​ imgcv2.imread(cat.jpg) img_gray…

新王加冕,GPT-4V 屠榜视觉问答

当前,多模态大型模型(Multi-modal Large Language Model, MLLM)在视觉问答(VQA)领域展现了卓越的能力。然而,真正的挑战在于知识密集型 VQA 任务,这要求不仅要识别视觉元素,还需要结…

电源控制系统架构(PCSA)之系统分区电源域

目录 4.2 电源域 4.2.1 电源模式 4.2.2 电源域的选择 4.2.3 系统逻辑 4.2.4 Always-On域 4.2.5 处理器Clusters 4.2.6 CoreSight逻辑 4.2.7 图像处理器 4.2.8 显示处理器 4.2.9 其他功能 4.2.10 电源域层次结构要求 4.2.11 SOC域示例 4.2 电源域 电源域在这里被定…

Ubuntu20.04上编译安装TVM

本文主要讲述如何在ubuntu20.04平台上编译TVM代码并在python中import tvm成功。 源代码下载: git clone --recursive https://github.com/apache/tvm tvm 平台环境升级: 1) sudo apt-get update 2) sudo apt-get install -y pyth…

Vue3+element-plus,打包报错:Cannot read properties of null (reading ‘insertBefore‘)

一、现象:vue3 element-plus项目,本地启动时,页面所有操作都正常;部署到生产环境后,el-dialog、el-drawer弹框报错。 这个弹框报错问题,困扰好几天,查阅资料,可能是如下几个问题。 …

数据结构-树-二叉树-堆的实现

1.树概念及结构 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 。 有一个特殊的结点&#xff…

从裸机启动开始运行一个C++程序(十四)

前序文章请看: 从裸机启动开始运行一个C程序(十三) 从裸机启动开始运行一个C程序(十二) 从裸机启动开始运行一个C程序(十一) 从裸机启动开始运行一个C程序(十) 从裸机启动…

牛客 算法题 记负均正II golang实现

题目 HJ105 记负均正II golang 实现 package mainimport ("bufio""fmt""io""os""strconv""strings" )func main() {scanner : bufio.NewScanner(os.Stdin)nums:make([]int,0)sum:0minus:0for scanner.Scan() {l…

quickapp_快应用_DOM是否显示只能通过if指令!

目录 官网概念语法拓展使用三元表达式控制示例 官网 if指令 概念 if条件指令用于控制是否增加或者删除组件。 语法 <组件名 ifbol><组件名>上述语法中只要bol值为ture则显示该组件&#xff0c;若是bol值为false则不显示该组件(并将其从DOM结构中移除)。 拓展…

持续集成交付CICD:GitLabCI 通过trigger触发流水线

目录 一、理论 1.GitLabCI 二、实验 1.搭建共享库项目 2.GitLabCI 通过trigger触发流水线 三、问题 1.项目app02未触发项目app01 2.GitLab 报502网关错误 一、理论 1.GitLabCI (1) 概念 GitLab CI&#xff08;Continuous Integration&#xff09;是一种持续集成工具…

华为云人工智能入门级开发者认证学习笔记

人工智能入门级开发者认证 人工智能定义 定义 人工智能 (Artificial Intelligence) 是研究、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 强人工智能 vs 弱人工智能 强人工智能&#xff1a;强人工智能观点认为有可能制造出真正能推理&#xff08…

Redis-缓存高可用集群

Redis集群方案比较 哨兵模式 性能和高可用性等各方面表现一般&#xff0c;特别是在主从切换的瞬间存在访问瞬断的情况。另外哨兵模式只有一个主节点对外提供服务&#xff0c;没法支持很高的并发&#xff0c;且单个主节点内存也不宜设置得过大&#xff0c;否则会导致持久化文件过…

机器学习【02】在 Pycharm 里使用 Jupyter Notebook

只有 Pycharm 的 Professional 版才支持 Jupyter Notebook 本教程结束只能在pycharm中使用&#xff0c;下载的库在pycharm选中的虚拟环境中 ssh -L localhost:9999:localhost:8888 usernameip这句话每次都要用 准备 1.服务器安装jupyter sudo snap install jupyter2.在 Jup…

C#学习相关系列之base和this的常用方法

一、base的用法 Base的用法使用场景主要可以概括为两种&#xff1a; 1 、访问基类方法 2、 调用基类构造函数 使用要求&#xff1a;仅允许用于访问基类的构造函数、实例方法或实例属性访问器。从静态方法中使用 base 关键字是错误的。所访问的基类是类声明中指定的基类。 例如&…

怎样通过代理ip提高上网速度

在当今互联网高度发达的时代&#xff0c;我们经常需要使用代理IP来隐藏自己的真实IP地址或提高网络连接速度。然而&#xff0c;有些用户可能会遇到代理IP无法提高网络速度的情况。那么&#xff0c;如何通过代理IP提高上网速度呢&#xff1f;以下是几个技巧&#xff1a; 1.选择…

android 保活的一种有效的方法

android 保活的一种有效的方法 为什么要保活 说起程序的保活,其实很多人都觉得,要在手机上进行保活,确实是想做一些小动作,其实有些正常的场景也是需要我们进行保活的,这样可以增强我们的用户体验。保活就是使得程序常驻内存,这种程序不容易被杀,或者在被杀以后还能完…

【CVE-2021-1675】Spoolsv打印机服务任意DLL加载漏洞分析

漏洞详情 简介 打印机服务提供了添加打印机的接口&#xff0c;该接口缺乏安全性校验&#xff0c;导致攻击者可以伪造打印机信息&#xff0c;在添加新的打印机时实现加载恶意DLL。这造成的后果就是以system权限执行任意代码。 影响版本 windows_10 20h2 windows_10 21h1 win…