• 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上操作,以下是安装的软件及版本:

    1. Docker:version 1.12.6
    2. Git:version 2.10.1
    3. GitLab: GitLab Community Edition 9.1.4
    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 支持需要满足:

    1. Git LFS is supported in GitLab starting with version 8.2. (gitlab版本需要 >= 8.2)
    2. Git LFS must be enabled under project settings (必须在项目设置中开启LFS)
    3. 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 开启|关闭

    img

    img

    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
    

    注意:

    1. 这里我们可以看出,使用 LFS 的项目,Clone 时会提示 Downloading … 或者 Git LFS … ,当 Push 的文件更大一些的时候,我们会发现使用 LFS 的项目复制和提取文件会更快一些。
    2. 这里可使用git clone ...或者使用git lfs clone ...即指定该项目使用 lfs 均可,具体 git lfs 其他命令,可参考git lfs help命令。
    3. 开启 LFS 的项目,当 Push 大文件之后,在 GitLab Web 页面上是删除不了的,需要通过接口删除该文件。

    img

    参考资料:

  • 相关阅读:
    抽象类与抽象方法
    简单工厂模式
    面向对象的七种基本设计原则
    HashTable集合遍历的三种方法
    继承(父类为虚方法以及子类的重写)
    继承(is与as)
    Chrome OS 更新新版本可让Linux访问USB连接的Android设备
    谷歌对Intel 10nm进度不满
    盖茨对没能做好手机系统对抗苹果表示遗憾
    微软内部封杀 Slack
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/13724646.html
Copyright © 2020-2023  润新知