GitLab 之 Git LFS 大文件存储的配置

参考
https://cloud.tencent.com/developer/article/1010589

  1. LFS介绍

    Git 大文件存储(Large File Storage,简称LFS)目的是更好地把大型二进制文件,比如音频文件、数据集、图像和视频等集成到 Git 的工作流中。我们知道,Git 存储二进制效率不高,因为它会压缩并存储二进制文件的所有完整版本,随着版本的不断增长以及二进制文件越来越多,这种存储方案并不是最优方案。而 LFS 处理大型二进制文件的方式是用文本指针替换它们,这些文本指针实际上是包含二进制文件信息的文本文件。文本指针存储在 Git 中,而大文件本身通过HTTPS托管在Git LFS服务器上。

  2. 系统环境和软件环境
    系统环境

# cat /etc/redhat-release 
CentOS Stream release 9
# uname -a
Linux CentOSStream9Git215 5.14.0-381.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Oct 30 23:56:21 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

软件版本

# gitlab-rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 3.0.6p216 (2023-03-30 revision 23a532679b) [x86_64-linux]
 GitLab:       16.5.1 (d59d7a49a1f) FOSS
 GitLab Shell: 14.29.0
 PostgreSQL:   13.11
------------------------------------------------------------[ booted in 57.47s ]
Loading production environment (Rails 7.0.8)
# git version
git version 2.39.3
  1. lfs支持
    为了更好的服务社区,满足版本大型文件的需求,GitLab 宣布支持 Git LFS,现在已经包括在 GitLab.com,GitLab 社区版本和 GitLab 企业版本。但是 GitLab 对 Git LFS 支持需要满足:
    Git LFS is supported in GitLab starting with version 8.2. (gitlab版本需要 >= 8.2)
    Git LFS must be enabled under project settings (必须在项目设置中开启LFS)
    Users need to install Git LFS client version 1.0.1 and up (本地git lfs客户端版本 >= 1.0.1)
  2. 客户端安装git-lfs
    Gitlab默认支持lfs无需配置
    git客户端默认不安装lfs需要安装
# yum -y install git-lfs
  1. Git提交大文件
    Gitlab新建仓库
    客户端clone仓库
# git  clone http://192.168.3.215/liuym/lfs.git

进入目录复制一个大文件

# cp lfs-bak/ubuntu-22.04.4-desktop-amd64.iso lfs

提交大文件

# 设置存储到 LFS 的文件,如果有多个类似文件可以使用通配符 "*.iso"
# git lfs track ubuntu-22.04.4-desktop-amd64.iso
Tracking "ubuntu-22.04.4-desktop-amd64.iso"
# 会在当前目录生成文件.gitattributes可以查看该文件内容记录了lfs文件信息
# cat .gitattributes 
ubuntu-22.04.4-desktop-amd64.iso filter=lfs diff=lfs merge=lfs -text
# 添加提交
# git add ubuntu-22.04.4-desktop-amd64.iso 
# git add .gitattributes 
# git commit -m "Commit a big file"
# git push

查看仓库已经把大文件提交上去
image
image
6. Git下载大文件

# git  lfs clone http://192.168.3.215/liuym/lfs.git

注意: 下载大文件需要加参数lfs 本次测试不加lfs也能把大文件下载下来

排错:在git push提示以下错误

LFS: Client error &{%!!(string=http) %!!(string=) %!!(*url.Userinfo=<nil>) %!!(string=192.168.3.215) %!!(string=/xiaoxing/baidu_doc.git/gitlab-lfs/objects/354a8e0ce8e279046fa87423d5fe4b934bb111d5cd878d02e9efce98f2da5afc/27274948040) %!!(string=) %!!(bool=false) %!!(bool=false) %!!(string=) %!!(string=) %!!(string=)}s(MISSING) from HTTP 413

原因:文件太大已经超过gitlab设置的最大文件限制
处理方法:修改配置文件提高gitlab允许上传最大文件设置

# !995
sed '/#/d' /etc/gitlab/gitlab.rb|sed '/^$/d'
external_url 'http://192.168.3.215'
gitlab_rails['gitlab_ssh_host'] = 'ssh.192.168.3.215'
gitlab_rails['lfs_enabled'] = true
gitlab_rails['lfs_storage_path'] = "/var/opt/gitlab/gitlab-rails/shared/lfs-objects"
gitlab_rails['lfs_http_enabled'] = true
gitlab_rails['lfs_http_url'] = "http://gitlab.xiaoxingcloud.com"
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/backup/gitlab"
gitlab_rails['backup_archive_permissions'] = 0644
gitlab_rails['backup_keep_time'] = 604800
nginx['client_max_body_size'] = '50480m'

重点是配置,设置最大文件为50G

# nginx['client_max_body_size'] = '50480m'

配置生效

# gitlab-ctl reconfigure

补充:
如果在可见性与访问控制里面定义了自定义HTTP(S)协议Git克隆URL而且定义了域名
那么则无法推送lfs需要设置成ip并且在内网进行推送
原因不明
image
image

2024-08-15补充
在可见性与访问控制里面也可以不设置成ip地址设置成http请求然后在局域网客户端设置hosts是可以正常进行代码下载和推送的
在外网加了一层nginx进行https访问时可以正常进行代码下载但是无法推送,目前没找到解决方法

posted @ 2024-08-10 12:18  minseo  阅读(409)  评论(0编辑  收藏  举报