GitLab 之 Git LFS 大文件存储的配置
转载自:https://cloud.tencent.com/developer/article/1010589
1、Git LFS 介绍
Git 大文件存储(Large File Storage,简称LFS)目的是更好地把大型二进制文件,比如音频文件、数据集、图像和视频等集成到 Git 的工作流中。我们知道,Git 存储二进制效率不高,因为它会压缩并存储二进制文件的所有完整版本,随着版本的不断增长以及二进制文件越来越多,这种存储方案并不是最优方案。而 LFS 处理大型二进制文件的方式是用文本指针替换它们,这些文本指针实际上是包含二进制文件信息的文本文件。文本指针存储在 Git 中,而大文件本身通过HTTPS托管在Git LFS服务器上。
2、环境、软件准备
本次演示环境,我是在虚拟机Linux Centos7上操作,以下是安装的软件及版本:
- Docker:version 1.12.6
- Git:version 2.10.1
- GitLab: GitLab Community Edition 9.1.4
- Git-lfs: version 2.2.1
注意:GitLab 这里我使用基于 Docker 安装,所以需要先安装一下 Docker,后边演示 Git-lfs 操作,需要本地先安装 Git,这里 Git、GitLab、Docker 的安装忽略,着重讲一下 Git lfs。
3、Git LFS 安装
客户端 Git LFS 安装步骤很简单,有好几种安装方式:
1、去 Git LFS 官网下载最新版安装包安装
$ wget https://github.com/git-lfs/git-lfs/releases/download/v2.2.1/git-lfs-darwin-amd64-2.2.1.tar.gz
$ tar -zxvf git-lfs-darwin-amd64-2.2.1.tar.gz
$ cd git-lfs-2.2.1
$ ./install.sh
2、 brew 安装方式
$ brew install git-lfs
3、直接 git 命令安装
$ git lfs install
注意:Git LFS客户端版本必须 >= 1.0.1,这里我们安装的版本是2.2.1。
4、GitLab 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)
4.1 配置 GitLab 是否开启 Git LFS 以及修改默认 LFS 存储路径。
新版 GitLab 默认是开启 Git LFS 支持,默认存储路径为:{gitlab_rails['shared_path']}/lfs-objects
。若我们想关闭 Git LFS 或者修改存储路径的话,可以通过下边方法修改:
1、GitLab 以 Omnibus packages 混合包安装
修改/etc/gitlab/gitlab.rb
gitlab_rails['lfs_enabled'] = true | false
#默认位置:`/var/opt/gitlab/gitlab-rails/shared/lfs-objects`
gitlab_rails['lfs_storage_path'] = "/mnt/storage/lfs-objects"
2、GitLab 以 source 源码安装
修改config/gitlab.yml:
lfs:
enabled: false | true
storage_path: /mnt/storage/lfs-objects
4.2 GitLab 的 Project 设置开启 LFS
在 GitLab 中设置项目的 LFS 开启|关闭:project -> setting -> general -> project settings -> LFS enabled/disabled。具体设置看4.3.1中的图。
4.3 示例操作
为了更好的演示操作,我们新建两个项目,分别为 demo1 和 demo2 ,demo1 不开启 LFS 支持,demo2 开启 LFS 支持,然后我们分别进行一下操作,看看他们区别:
1、先设置项目 LFS 开启|关闭
2、Git操作
我们先分别提交稍大一些的文件到各个项目中
$ git clone http://wanyang3@10.236.65.134/scm/demo1.git
$ cd demo1
$ cp ~/Downloads/soft/apache-tomcat-8.0.36.zip ./
$ git add .
$ git commit -m "test no lfs"
$ git push origin master
$ git clone http://wanyang3@10.236.65.134/scm/demo2.git
$ cd demo2
$ cp ~/Downloads/soft/apache-tomcat-8.0.36.zip ./
$ git lfs track "*.zip" #设置存储到 LFS 的文件扩展名,这里我设置 .zip 后缀格式的文件
$ cat .gitattributes #自动生成的文件,需一并提交到 Git,否则 Clone 项目的时候 Git LFS 不起作用
* .zip filter=lfs diff=lfs merge=lfs -text
$ git add .
$ git commit -m "test with lfs"
$ git push origin master
注意:我们对比下使用 LFS 和不使用 LFS 的项目操作,只需要在想加入的大文件时,增加文件后缀,执行git lfs track "*.zip"·
一条语句即可,并未产生额外的 Git 指令,还是很容易上手的。
然后,我们在分别 Clone 各个项目
$ git clone http://wanyang3@10.236.65.134/scm/demo1.git
Cloning into 'demo1'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
$ git clone http://wanyang3@10.236.65.134/scm/demo2.git
Cloning into 'demo2'...
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 7 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (7/7), done.
Downloading apache-tomcat-8.0.36.zip (9.9 MB)
或者
$ git lfs clone http://wanyang3@10.236.65.134/scm/demo2.git
Cloning into 'demo2'...
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 7 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (7/7), done.
Git LFS: (1 of 1 files) 9.40 MB / 9.40 MB
注意:
- 这里我们可以看出,使用 LFS 的项目,Clone 时会提示 Downloading … 或者 Git LFS … ,当 Push 的文件更大一些的时候,我们会发现使用 LFS 的项目复制和提取文件会更快一些。
- 这里可使用
git clone ...
或者使用git lfs clone ...
即指定该项目使用 lfs 均可,具体 git lfs 其他命令,可参考git lfs help
命令。 - 开启 LFS 的项目,当 Push 大文件之后,在 GitLab Web 页面上是删除不了的,需要通过接口删除该文件。
参考资料:
GitLab 之 Git LFS 大文件存储的配置的更多相关文章
- php 上传大文件主要涉及配置upload_max_filesize和post_max_size两个选项
php 上传大文件主要涉及配置 upload_max_filesize 和post_max_size两个选项 今天在做上传的时候出现一个非常怪的问题,有时候表单提交可以获取到值,有时候就获取不到了 ...
- Git 提交大文件提示 fatal: The remote end hung up unexpectedly
使用gitlab搭建的git server,如果直接使用http的方式去提交的话,提交小文件不会有问题,但是提交大文件时,会出错: fatal: The remote end hung up unex ...
- git 突破大文件上传限制
1.安装 lfs: git lfs install 2.跟踪大文件:git lfs track "file.suffix" 3.添加配置文件:git add .gitattribu ...
- Git 删除大文件的方法
git 仓库中删除历史大文件 git 仓库中删除历史大文件 在git中增加了一个很大的文件,而且被保存在历史提交记录中,每次拉取代码都很大,速度很慢.而且用删除 提交历史记录的方式不是很实际. 以 ...
- mongoDB 大文件存储方案, JS 支持展示
文件存储 方式分类 传统方式 存储路径 仅存储文件路径, 本质为 字符串 优点: 节省空间 缺点: 不真实存储在数据库, 文件或者数据库发送变动需要修改数据库 存储文件本身 将文件转换成 二进制 存储 ...
- 解决git commit 大文件推送失败
//查找大文件 git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5 //根据上面查找到的hash值,筛选文 ...
- mongo 固定集合,大文件存储,简单优化 + 三招解决MongoDB的磁盘IO问题
1.固定集合 > db.createCollection(, max:});//固定集合 必须 显式创建. 设置capped为true, 集合总大小xxx字节, [集合中json个数max] { ...
- ios大文件存储
I am using Erica Sadun's method of Asynchronous Downloads (link here for the project file: download) ...
- Git Push大文件报错后如何撤回
昨晚在提交一个项目代码时,不小心把数据库备份文件也一起Commit了:到最后Push的时候报错了.最后弄了半天解决了,在此记录下. 如下图,文件有108M. 项目放在第三方托管平台上,根据提示查看了原 ...
随机推荐
- 5-15 Virtual 虚拟机
虚拟机基本使用 Virtualbox安装流程 RockyLinux VirtualBox清华大学个版本下载路径 https://mirrors.tuna.tsinghua.edu.cn/virtual ...
- 关于 STrAduts
\(\mathbb{No \ hay \ cosa \ mas \ feliz \ en \ el \ mundo \ que \ ver \ tu \ sonrisa \ mi \ [数据删除]}\ ...
- Java开发学习(十五)----AOP入门案例及其工作流程解析
一.AOP简介 1.1 什么是AOP AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构. OOP(Object Oriented ...
- ASP.NET Core 6.0 基于模型验证的数据验证
1 前言 在程序中,需要进行数据验证的场景经常存在,且数据验证是有必要的.前端进行数据验证,主要是为了减少服务器请求压力,和提高用户体验:后端进行数据验证,主要是为了保证数据的正确性,保证系统的健壮性 ...
- mysql防SQL注入搜集
SQL注入 例:脚本逻辑 $sql = "SELECT * FROM user WHERE userid = $_GET[userid] "; 案例1:SELECT * FROM ...
- Postgres常用时间查询
如select extract(day from now());
- 选择结构——嵌套 if 控制语句
1.嵌套 if 控制语句 概念: 在 if 控制语句中又包含一个或多个 if 控制语句的简称为嵌套 if 控制语句.嵌套 if 控制语句可以通过外层语句和内层语句的协作,来增强程序的灵活性. 语法格式 ...
- OS模块中获取当前文件的绝对路径的相关方法
os.path.realpath(__file__) 作用:获取当前执行py脚本的绝对路径(在当前工作目录下的绝对路径) __file__ : 表示当前文件的本身,一般值是当前文件的相对路径 例如: ...
- Rider调试ASP.NET Core时报thread not gc-safe的解决方法
新建了一个ASP.NET Core 5.0的Web API项目,当使用断点调试Host.CreateDefaultBuilder(args)时,进入该函数后查看中间变量的值,报错Evaluatio ...
- Docker 14 网络
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...