当前位置: 首页 > news >正文

极狐GitLab Git LFS(大文件存储)如何管理?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channel=content&utm_source=csdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。

极狐GitLab 在 5 月 28 日正式发布了 AI 产品驭码CodeRider。现已开启免费试用,登录官网:https://coderider.gitlab.cn/ 即可申请试用。

更多关于极狐GitLab :https://gitlab.cn 或者 DevOps 的最佳实践,可以关注文末的极狐GitLab 公众号。

学习极狐GitLab 的相关资料:

  1. 极狐GitLab 官网:https://gitlab.cn
  2. 极狐GitLab 官网文档:https://docs.gitlab.cn
  3. 极狐GitLab 论坛:https://forum.gitlab.cn/
  4. 极狐GitLab 安装配置:https://gitlab.cn/install
  5. 极狐GitLab 资源中心:https://resources.gitlab.cn/
  6. AI 产品驭码CodeRider:https://coderider.gitlab.cn/

搜索【极狐GitLab】公众号,后台输入加群,备注gitlab,即可加入官方微信技术交流群。

此页面包含有关在私有化部署实例中配置 Git LFS 的信息。
有关 Git LFS 的用户文档,请参阅 Git 大文件存储。
先决条件:

  • 用户需要安装 Git LFS 客户端 1.0.1 或更高版本。

启用或禁用 LFS

默认情况下启用 LFS。要禁用它:

Omnibus

  1. 编辑 /etc/gitlab/gitlab.rb
# Change to true to enable lfs - enabled by default if not defined
gitlab_rails['lfs_enabled'] = false
  1. 保存文件并重新配置极狐GitLab:
sudo gitlab-ctl reconfigure

Kubernetes

  1. 导出 Helm 值:
helm get values gitlab > gitlab_values.yaml
  1. 编辑 gitlab_values.yaml
global:appConfig:lfs:enabled: false
  1. 保存文件并应用新值:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab

Docker

  1. 编辑 docker-compose.yml
version: "3.6"
services:gitlab:environment:GITLAB_OMNIBUS_CONFIG: |gitlab_rails['lfs_enabled'] = false
  1. 保存文件并重启极狐GitLab:
docker compose up -d

源安装

  1. 编辑 /home/git/gitlab/config/gitlab.yml
production: &baselfs:enabled: false
  1. 保存文件并重启极狐GitLab:
# For systems running systemd
sudo systemctl restart gitlab.target# For systems running SysV init
sudo service gitlab restart

更改本地存储路径

Git LFS 对象可以很大。默认情况下,它们存储在安装极狐GitLab 的服务器上。

NOTE:对于 Docker 安装实例,您可以更改装载数据的路径。 对于 Helm chart 安装实例,请使用对象存储。

要更改默认的本地存储路径位置:

Omnibus

  1. 编辑 /etc/gitlab/gitlab.rb
# /var/opt/gitlab/gitlab-rails/shared/lfs-objects by default.
gitlab_rails['lfs_storage_path'] = "/mnt/storage/lfs-objects"
  1. 保存文件并重新配置极狐GitLab:
sudo gitlab-ctl reconfigure

源安装

  1. 编辑 /home/git/gitlab/config/gitlab.yml
# /home/git/gitlab/shared/lfs-objects by default.
production: &baselfs:storage_path: /mnt/storage/lfs-objects
  1. 保存文件并重启极狐GitLab:
# For systems running systemd
sudo systemctl restart gitlab.target# For systems running SysV init
sudo service gitlab restart

在远程对象存储中存储 LFS 对象

您可以将 LFS 对象存储在远程对象存储中。这使您可以减少对本地磁盘的读取和写入,并释放磁盘空间。

NOTE:在 13.2 及更高版本,您应该使用整合对象存储设置。

迁移到对象存储

您可以将 LFS 对象从本地存储迁移到对象存储。处理在后台完成,不需要停机。

  1. 配置对象存储。

  2. 迁移 LFS 对象:

Omnibus
sudo gitlab-rake gitlab:lfs:migrate

Docker

sudo docker exec -t <container name> gitlab-rake gitlab:lfs:migrate

源安装

sudo -u git -H bundle exec rake gitlab:lfs:migrate RAILS_ENV=production
  1. 可选。使用 PostgreSQL 控制台跟踪进度并验证所有作业 LFS 对象是否已成功迁移。

    1. 打开 PostgreSQL 控制台:
Omnibus
sudo gitlab-psql
Docker
sudo docker exec -it <container_name> /bin/bash
gitlab-psql
源安装
sudo -u git -H psql -d gitlabhq_production
  1. 使用以下 SQL 查询验证所有 LFS 文件是否已迁移到对象存储。objectstg 的数量应与 total 相同:
gitlabhq_production=# SELECT count(*) AS total, sum(case when file_store = '1' then 1 else 0 end) AS filesystem, sum(case when file_store = '2' then 1 else 0 end) AS objectstg FROM lfs_objects;total | filesystem | objectstg
------+------------+-----------2409 |          0 |      2409
  1. 验证 lfs-objects 目录中的磁盘上没有文件:
Omnibus
sudo find /var/opt/gitlab/gitlab-rails/shared/lfs-objects -type f | grep -v tmp | wc -l
Docker

假设您将 /var/opt/gitlab 挂载到 /srv/gitlab

sudo find /srv/gitlab/gitlab-rails/shared/lfs-objects -type f | grep -v tmp | wc -l
源安装
sudo find /home/git/gitlab/shared/lfs-objects -type f | grep -v tmp | wc -l

迁移回本地存储

NOTE:对于 Helm chart,您应该使用对象存储。

要迁移回本地存储:

Omnibus
  1. 迁移 LFS 对象:
sudo gitlab-rake gitlab:lfs:migrate_to_local
  1. 编辑 LFS 对象的 /etc/gitlab/gitlab.rb 和禁用对象存储:
gitlab_rails['object_store']['objects']['lfs']['enabled'] = false
  1. 保存文件并重新配置极狐GitLab:
sudo gitlab-ctl reconfigure

Docker

1.迁移 LFS 对象:

sudo docker exec -t <container name> gitlab-rake gitlab:lfs:migrate_to_local
  1. 编辑 docker-compose.yml 并禁用 LFS 对象的对象存储:
version: "3.6"
services:gitlab:environment:GITLAB_OMNIBUS_CONFIG: |gitlab_rails['object_store']['objects']['lfs']['enabled'] = false
  1. 保存文件并重启极狐GitLab:
docker compose up -d
源安装
  1. 迁移 LFS 对象:
sudo -u git -H bundle exec rake gitlab:lfs:migrate_to_local RAILS_ENV=production
  1. 编辑 /home/git/gitlab/config/gitlab.yml 并禁用 LFS 对象的对象存储:
production: &baseobject_store:objects:lfs:enabled: false
  1. 保存文件并重启极狐GitLab:
# For systems running systemd
sudo systemctl restart gitlab.target# For systems running SysV init
sudo service gitlab restart

故障排除

缺少 LFS 对象

在以下任何一种情况下,都可能会出现有关丢失 LFS 对象的错误:

  • 将 LFS 对象从磁盘迁移到对象存储时,出现以下错误消息:
ERROR -- : Failed to transfer LFS object
006622269c61b41bf14a22bbe0e43be3acf86a4a446afb4250c3794ea47541a7
with error: No such file or directory @ rb_sysopen -
/var/opt/gitlab/gitlab-rails/shared/lfs-objects/00/66/22269c61b41bf14a22bbe0e43be3acf86a4a446afb4250c3794ea47541a7

(为了便于阅读,添加了换行符。)

  • 使用 VERBOSE=1 参数运行 LFS 对象的完整性检查。

数据库可以有不在磁盘上的 LFS 对象的记录。数据库条目可能会阻止推送对象的新副本。要删除这些引用:

  1. 启动 Rails 控制台。

  2. 查询 rails 控制台报错的对象,返回文件路径:

lfs_object = LfsObject.find_by(oid: '006622269c61b41bf14a22bbe0e43be3acf86a4a446afb4250c3794ea47541a7')
lfs_object.file.path
  1. 检查磁盘或对象存储是否存在:
ls -al /var/opt/gitlab/gitlab-rails/shared/lfs-objects/00/66/22269c61b41bf14a22bbe0e43be3acf86a4a446afb4250c3794ea47541a7
  1. 如果文件不存在,通过 rails 控制台删除数据库记录:
# First delete the parent records and then destroy the record itself
lfs_object.lfs_objects_projects.destroy_all
lfs_object.destroy

LFS 命令在 TLS v1.3 服务器上失败

如果您将极狐GitLab 配置为禁用 TLS v1.2,并且仅启用 TLS v1.3 连接,则 LFS 操作需要 Git LFS 客户端 2.11.0 或更高版本。如果您使用低于 2.11.0 版本的 Git LFS 客户端,极狐GitLab 会显示错误:

batch response: Post https://username:***@gitlab.example.com/tool/releases.git/info/lfs/objects/batch: remote error: tls: protocol version not supported
error: failed to fetch some objects from 'https://username:[MASKED]@gitlab.example.com/tool/releases.git/info/lfs'

在 TLS v1.3 配置的极狐GitLab 服务器上使用 CI 时,您必须升级到极狐GitLab Runner 13.2.0 或更高版本才能接收更新 Git LFS 客户端版本通过包含的 Runner Helper 镜像。
要检查已安装的 Git LFS 客户端的版本,请运行以下命令:

git lfs version

查看 PDF 文件时出错

当 LFS 配置了对象存储并将 proxy_download 设置为 false 时,您在从 Web 浏览器预览 PDF 文件时可能会看到错误:

An error occurred while loading the file. Please try again later.

这是由于跨源资源共享 (CORS) 限制造成的:浏览器尝试从对象存储加载 PDF,但对象存储提供程序拒绝请求,因为极狐GitLab 域名与对象存储域名不同。
要解决此问题,请将对象存储提供商的 CORS 设置配置为允许极狐GitLab 域名。有关详细信息,请参阅以下文档:

  1. AWS S3
  2. Google Cloud Storage
  3. Azure Storage

已知限制

仅与 Git LFS 客户端版本 1.1.0 及更高版本或 1.0.2 兼容。
存储统计为每个链接到它的项目计算每个 LFS 对象。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JSP静态包含与动态包含的区别
  • 基于 Go1.19 的站点模板爬虫:构建与实战
  • IDEA的常见代码模板的使用
  • 数据仓库的一致性维度
  • 如何在 Mac 上下载安装植物大战僵尸杂交版? 最新版本 2.2 详细安装运行教程问题详解
  • AWS服务器购买:如何选择合适的AWS云服务器
  • 大语言模型-检索测评指标
  • Docker 修改默认镜像的存储位置
  • 【考研数学】线代满分经验分享+备考复盘
  • 【Qt】事件处理
  • 图论建模技巧搜集
  • Matlab学习笔记1
  • 扩容升级丨极海正式推出G32A1465系列汽车通用MCU,驱动智驾再进阶
  • 【转盘案例-弹框-修改Bug-完成 Objective-C语言】
  • 【中项】系统集成项目管理工程师-第2章 信息技术发展-2.2新一代信息技术及应用-2.2.1物联网与2.2.2云计算
  • (三)从jvm层面了解线程的启动和停止
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [nginx文档翻译系列] 控制nginx
  • [笔记] php常见简单功能及函数
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Idea+maven+scala构建包并在spark on yarn 运行
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • nginx 配置多 域名 + 多 https
  • oschina
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • v-if和v-for连用出现的问题
  • 闭包,sync使用细节
  • 七牛云假注销小指南
  • 使用putty远程连接linux
  • 网络应用优化——时延与带宽
  • 最近的计划
  • 阿里云服务器购买完整流程
  • ​queue --- 一个同步的队列类​
  • ​人工智能书单(数学基础篇)
  • ​虚拟化系列介绍(十)
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014# day.1 T2 联合权值
  • #QT 笔记一
  • (a /b)*c的值
  • (C#)获取字符编码的类
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)hibernate配置管理
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (强烈推荐)移动端音视频从零到上手(上)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)3D模板阴影原理
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 8.0 发布到 IIS
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core 中的路径问题
  • .Net Core 中间件验签
  • .net framework 4.8 开发windows系统服务