极狐GitLab仓库瘦身
参考文章:
[分享] 极狐GitLab仓库瘦身 - 官方技术分享 - 极狐GitLab 论坛
一、瘦身概述
Git仓库随着时间推移会变得越来越大,比如很多比较大的文件加入Git仓库时,可能引起以下问题:
- 下载仓库越来越慢,因为每个人都要下载文件
- 占用服务器大量存储空间
- 触发Git仓库存储限制
重写Git仓库可以移除不想要的仓库历史,减少仓库大小。
工具方面,我们推荐使用git filter-repo. 不推荐使用git filter-branch 或者 BFG.
git filter-repo
可以实现以下目的:
-
剥离大文件(或大目录或大扩展名)
-
按路径剥离不需要的文件
-
提取想要的路径及其历史(剥离所有其他内容)
-
重组文件布局(例如将所有文件移动到一个子目录中以准备与另一个 repo 合并,使子目录成为新的顶级目录,或将两个具有独立文件名的目录合并到一个目录中)
-
重命名标签(也经常为与另一个 repo 合并做准备)
-
替换或删除敏感文本,例如密码
-
使用户名与电子邮件的邮件映射关系重写永久化
-
使移植或替换引用(refs)永久化
-
重写commits消息
特别注意: 重写仓库是一种具有破坏性的操作,不应轻易使用,建议操作之前备份仓库,最好的仓库备份方式就是导出项目。
从仓库历史删除文件
想要对仓库瘦身,您必须首先从由 GitLab 自动创建的分支、标签和其他内部引用 (refs) 中删除对大文件的引用。这些引用(refs)包括:
- refs/merge-requests/* 用于合并请求。
- refs/pipelines/* 用于管道。
- refs/environments/* 用于环境。
- refs/keep-around/* 隐藏的refs,防止数据库中被删除
我们可以首先将项目导出,本地删除这些 refs,然后推送回去。
二、操作步骤
1、准备好环境Java、Gitlab、Python(https://www.python.org/)
注意下载python要用微软商店中下载的python3,自己下载安装的不好使。。。
2、下载git-filter-repo
官网:GitHub - newren/git-filter-repo: Quickly rewrite git repository history (filter-branch replacement)
3、备份并导出项目
防止操作失败,导致出现删库跑路的事情发生
4、使用 --bare
和 --mirror
参数从bundle中克隆仓库的新副本:
git clone --bare --mirror https://gitlab.fengqingx.com/project.git
5、清理克隆仓库中文件
进入project.git
文件夹。理论上,使用git filter-repo
可以从仓库的历史(包括master)中清除任何的文件。
由于我们试图删除内部引用(refs),所以我们依靠每次运行生成的commit-map
来告诉我们要删除哪些内部引用。
git filter-repo
每次运行都会生成一个commit-map
文件,并覆盖上一次生成的commit-map
。
比如,在所有分支中(包括master),清理10M大小以上的文件,使用参数--strip-blobs-bigger-than
:
python3 D://Project//Gitlab//git-filter-repo-main//git-filter-repo --strip-blobs-bigger-than 10M
比如,指定大文件的具体路径,使用参数--path
和--invert-paths
:
python3 D://Project//Gitlab//git-filter-repo-main//git-filter-repo --path path/to/big/file.m4v --invert-paths
参考git filter-repo
的官方文档,可以获取更多清理方式
6、配置remote远端仓库地址,将本地代码推送到gitlab服务器
git remote add origin https://gitlab.fengqx.com/xuan.git
-
7.推送变更,覆盖远程所有分支。
git push origin --force 'refs/heads/*'
如果远程分支是受保护的,请先禁用保护,然后推送,然后重新启用分支保护。
-
8.从标签release中删除大文件。
git push origin --force 'refs/tags/*'
如果标签是受保护的,请先禁用保护,然后推送,然后重新启用标签保护。
-
9.防止commit中存在死链。
git push origin --force 'refs/replace/*'
-
10.运行仓库清理。
三、仓库清理
仓库清理,就是允许上传一个包含目标对象的TXT文件。GitLab会清理这些目标对象的内部引用(refs)。你可以使用git filter-repo
生成这样的文件(commit-map
文件),用于清理。
注意文件commit-map
文件,每次执行完python命令,会生成一个commit-map文件,路径在D:\test\约翰\fengqx.git\filter-repo 中有commit-map文件
从13.6开始,安全的清理仓库需要确保在操作期间,没有git push等写操作,确保仓库是只读的,否则清理仓库的请求将提交失败。
清理仓库步骤:
-
打开项目
-
打开
Settings > Repository
-
上传清单文件,比如
git filter-repo
生成的commit-map
文件;
如果commit-map
文件大小超过250KB或者3000行,那么可以拆分文件并一个一个上传:split -l 3000 filter-repo/commit-map filter-repo/commit-map-
-
点击
Start cleanup
页面会提示:Repository cleanup has started. You will receive an email once the cleanup operation is complete.
将执行的动作:
- 移除任何对旧commits的内部引用。
- 运行
git gc --prune=30.minutes.ago
删除未引用的对象,临时重新打包仓库会导致仓库的大小显着增加,因为在创建新的打包文件之前不会删除旧的打包文件。 - 取消连接到项目的任何未使用的 LFS 对象,释放存储空间。
- 重新计算磁盘上仓库的大小。
清理完成后,GitLab 会发送一封电子邮件通知,其中包含重新计算的仓库大小。
如果仓库大小没有减少,这可能是由于在过去 30 分钟内发生的 Git 操作中引用了松散对象而导致的。 在仓库休眠至少 30 分钟后,尝试重新运行这些步骤。
四、注意事项:
- 项目统计信息是有缓存的,所以你可能需要等待 5-10 分钟才能看到存储使用率的降低。
- 清理会修剪超过 30 分钟的松散对象,也就是不会立即删除过去 30 分钟内添加或引用的对象。 如果你有权限访问 Gitlab 服务器,你可以避开延迟,并运行 git gc --prune=now 立即删除所有松散的对象。
- 这个操作从 GitLab 缓存和数据库中删除了一些重写提交的副本,但是覆盖范围仍然存在许多差距,并且一些副本可能会无限期地持续存在。
五、执行完第三步,此时重新拉代码,就会是压缩之后的gitlab仓库了。瘦身完成,
从500多MB,直接变成40MB
相关文章:
极狐GitLab仓库瘦身
参考文章: [分享] 极狐GitLab仓库瘦身 - 官方技术分享 - 极狐GitLab 论坛 一、瘦身概述 Git仓库随着时间推移会变得越来越大,比如很多比较大的文件加入Git仓库时,可能引起以下问题: 下载仓库越来越慢,因为每个人都…...

2288hv5超融合服务器 数码管报888
【问题现象】 2288hv5超融合服务器,前面板数码管报888,电源灯黄灯闪烁,开不了机,ibmc网络是通的,但是web网页打不开 【问题原因】 iBMC的版本过低,iBMC在智能诊断数据库保护机制存在异常,导…...
【Zabbix实战之部署篇】Zabbix监控windows系统配置方法
【Zabbix实战之部署篇】Zabbix监控windows系统配置方法 一、检查Zabbix监控平台状态1.检查Zabbix各组件状态2.检查Zabbix的首页二、下载windows代理1.访问Zabbix官网下载界面2.查看下载安装包三、安装windows agent2代理1.安装windows agent2代理2.代理基本配置信息3.开始进行安…...

在Windows上编译Nginx
《在Windows上编译Nginx》视频教程官方编译说明 Building nginx on the Win32 platform with Visual C 环境准备 1. Microsoft Visual Studio(Microsoft Visual C 编译器),下载地址:https://visualstudio.microsoft.com/zh-hans/。 2. Git(备用)&…...

语音识别与Python编程实践
博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的,…...

MATLAB绘制泰勒图(Taylor diagram)
泰勒图(Taylor diagram) 泰勒图是Karl E. Taylor于2001年首先提出,主要用来比较几个气象模式模拟的能力,因此该表示方法在气象领域使用最多,但是在其他自然科学领域也有一定的应用。 泰勒图常用于评价模型的精度&…...

ClickHouse高可用集群分片-副本实操(四)
目录 一、ClickHouse高可用之ReplicatedMergeTree引擎 二、 ClickHouse高可用架构准备-环境说明和ZK搭建 三、高可用集群架构-ClickHouse副本配置实操 四、ClickHouse高可用集群架构分片 4.1 ClickHouse高可用架构之两分片实操 4.2 ClickHouse高可用架构之两分片建表实操 一…...

2022年中国工业机器人行业市场回顾及2023年发展前景预测分析
工业机器人是一种能自动定位控制、可重复编程的、多功能的、多自由度的操作机,广泛应用于码垛、冲压、分拣、焊接、切割、喷涂、上下料等工业场景中,极大提高了生产效率、安全性以及智能化水平。工业机器人作为我国高端制造业的典型代表,近年…...

Gehpi的网络布局
Gehpi的网络布局1. 力引导布局2. 辅助布局布局是网络可视化中的重要概念,指将点和边通过某种策略进行排布,应尽可能满足以下4个原则: 节点均匀分布在有限的区域内避免边的交叉和弯曲保持边的长度一致整体布局能反映图内在的特性 Gephi的布局…...

华为OD机试用Python实现 -【天然蓄水库 or 天然蓄水池】(2023-Q1 新题)
华为OD机试题 华为OD机试300题大纲天然蓄水库 or 天然蓄水池题目描述输入描述输出描述说明示例一输入输出说明示例二输入输出说明示例三输入输出说明Python 代码实现算法思路华为OD机试300题大纲 参加华为...

西北工业大学大学物理(I)下期末考试2021-2022选填解析
11 告诉你n2了,那么l0或者1,后续限制类推。2 几乎每年都出。散射波波长的偏移只与散射角有关。3 产生激光的条件。先认识到激光就是受激幅射光放大。受激辐射是产生激光的必要条件,粒子数偏转是产生激光的必要条件,谐振腔也需要。…...

【数据结构】手撕红黑树
目录 一、红黑树简介 1、红黑树的简介 2、红黑树的性质 二、红黑树的插入(看叔叔的颜色就行) 1、为什么新插入的节点必须给红色? 2、插入红色节点后,判定红黑树性质是否被破坏 2.1情况一:uncle存在且为红 2.2情…...

Linux基础命令-which查找命令文件位置
文章目录 which 命令功能 语法格式 基本参数 参考实例 1)查找chmod命令的文件位置 2)查找chmod命令的所有路径 3)一次性查找多个命令路径 4)组合其他命令一起使用 5)显示命令的版本信息 命令总结 which 命…...
在Python中,导入拓展库的规范如下:
在Python中,导入拓展库的规范如下: Import 模块名 [as 别名] from 模块名Import 对象名 [as 别名] from 模块名 import * 1.导入标准库和第三方库的方式应该不同 Python标准库已经默认安装在Python解释器中,因此在导入标准库时不需要…...

SEATA是什么?它的四种分布式事务模式
一、SEATA是什么? Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 在继续学习使用SEATA之前,对s…...

【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明去重求和题目输入输出示例一输入输出说明示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。…...

如何用 chatGPT,给大家来一个自我介绍
大家好,我是不吃西红柿的无线机械键盘,我的名字叫 Keychron K3 Pro。今天,我通过西红柿主人的手,使用 chatGPT 来介绍一下我自己。我的与众不同 我是由精密机械元件制作而成,并采用抗键渗设计,以提供更快、…...

进程管理之基本概念
目录 关于进程的基本概念 进程描述符 查看进程 进程标识 进程的生命周期 僵尸进程、孤儿进程 写时拷贝技术 fork()函数 vfork()函数 终止进程 进程优先级和权重 进程地址空间 关于进程的基本概念 进程和程序是操作系统领域的两个重要的概念,进程是执行…...

nginx安装部署实战手册
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、虚拟机安装nginx1.下载安装包2.安装编译工具和库文件3.编译安装4.启动nginx5.访问首页6.开机自启结尾一、虚拟机安装nginx 1.下载安装包 官网下载地址…...
XXL-JOB任务调度平台
什么是xxl-job? xxl-job是一个分布式的任务调度平台,其核心设计目标是:学习简单、开发迅速、轻量级、易扩展,现在已经开放源代码并接入多家公司的线上产品线,开箱即用。xxl是xxl-job的开发者大众点评的许雪里名称的拼…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...