Gitee(gitee.com) 已支持 Git LFS 功能,目前该功能针对付费企业开放。

Git LFS 简介

Git LFS(Large File Storage, 大文件存储)是 Github 开发的一个 Git 的扩展,用于实现 Git 对大文件的支持。

Git LFS可以把音乐、图片、视频等指定的任意文件存在 Git 仓库之外,而在 Git 仓库中用一个占用空间 1KB 不到的文本指针来代替文件的存在。

通过把大文件存储在 Git 仓库之外,可以减小 Git 仓库本身的体积,使克隆 Git 仓库的速度加快,也使得 Git 不会因为仓库中充满大文件而损失性能。

使用 Git LFS,在默认情况下,只有当前签出的 commit 下的 LFS 对象的当前版本会被下载。此外,我们也可以做配置,只取由 Git LFS 管理的某些特定文件的实际内容,而对于其他由 Git LFS 管理的文件则只保留文件指针,从而节省带宽,加快克隆仓库的速度;也可以配置一次获取大文件的最近版本,从而能方便地检查大文件的近期变动。详见后文进阶使用。

要使用 Git LFS 只需要经过一次下载安装后,指定需要由 Git LFS 管理的文件即可。

Git LFS 下载和安装

注意:安装 Git LFS 需要 Git 的版本不低于 1.8.5

Git LFS 官网: https://git-lfs.github.com/

Windows 系统

双击安装包,打开安装 git-lfs

在命令行中执行 git lfs install(需要确认 git-lfs 命令已经被包含在环境变量中)

BSD / Linux 系统

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

sudo apt-get install git-lfs

git lfs install

macOS 系统

brew installgit-lfs

git lfs install

Arch Linux

sudopacman -S --noconfirm git-lfs

Git LFS 配置

使用 git lfs track 追踪需要使用 Git LFS 管理的文件。如:

git lfs track "*.psd"

也可以手动编辑 Git 仓库根目录下的 .gitattributes 文件,如:

*.psd filter=lfs diff=lfs merge=lfs -text

常用 Git LFS 命令

查看当前使用 Git LFS 管理的匹配列表

git lfs track

使用 Git LFS 管理指定的文件

git lfs track "*.psd"

不再使用 Git LFS 管理指定的文件

git lfs untrack "*.psd"

类似 git status,查看当前 Git LFS 对象的状态

git lfs status

枚举目前所有被 Git LFS 管理的具体文件

git lfs ls-files

检查当前所用 Git LFS 的版本

git lfs version

针对使用了 LFS 的仓库进行了特别优化的 clone 命令,显著提升获取LFS 对象的速度,接受和 git clone 一样的参数。

git lfs clone https://gitee.com/user/repo.git

git lfs clone 通过合并获取 LFS 对象的请求,减少了 LFS API 的调用,并行化 LFS 对象的下载,从而达到显著的速度提升。git lfs clone 命令同样也兼容没有使用 LFS 的仓库。即无论要克隆的仓库是否使用 LFS,都可以使用 git lfs clone 命令来进行克隆。

目前最新版本的 git clone 已经能够提供与 git lfs clone 一致的性能,因此自 Git LFS 2.3.0 版本起,git lfs clone 已不再推荐使用。

Git LFS 进阶使用

使用 Git LFS 的核心思想就是把需要进行版本管理、但又占用很大空间的那部分文件独立于 Git 仓库进行管理。从而加快克隆仓库本身的速度,同时获得灵活的管理 LFS 对象的能力。

默认情况下,只有当前 commit 下的 LFS 对象的当前版本才会被获取。

只获取仓库本身,而不获取任何 LFS 对象

如果自己的相关工作不涉及到被 Git LFS 所管理的文件的话,可以选择只获取 Git 仓库自身的内容,而完全跳过 LFS 对象的获取。

GIT_LFS_SKIP_SMUDGE=1 git clone https://gitee.com/user/repo.git

# 或

git -c filter.lfs.smudge= -c filter.lfs.required=falseclone https://gitee.com/user/repo.git

注:GIT_LFS_SKIP_SMUDGE=1 及 git -c filter.lfs.smudge= -c filter.lfs.required=false 同样使用于其他 git 命令,如 checkout, reset 等。

获取当前 commit 下包含的 LFS 对象的当前版本

如果起初获取代码时,没有一并获取 LFS 对象,而随后又需要这些被 LFS 管理的文件时,可以单独执行 LFS 命令来获取并签出 LFS 对象:

git lfs fetch

git lfs checkout

# 或

git lfs pull

仅获取指定目录下的 LFS 对象

比如说,我们有一仓库,里面包含了许多源代码文件,以及一些图像、视频等资源文件,其目录结构如下:

zzz.buzz

├── images

│ ├── cat.png

│ ├── dog.gif

│ └── rabbit.webp

├── src

│ ├── buzz.css

│ ├── index.html

│ └── zzz.js

└── videos

├── chameleon.mp4

└── iguana.webm

其中的 images/** 以及 videos/** 是被 LFS 所管理的。

但是,如果只想取 images 文件夹,而不想获取 videos 文件夹下的文件的话,我们就可以选择配置 LFS 下载对象时仅包含 images 文件夹:

git config lfs.fetchinclude 'images/**'

随后,git checkout, git reset, git lfs fetch, git lfs pull 等命令就都会只处理所指定的文件夹。

类似地,我们也可以选择仅排除指定的文件夹:

git config lfs.fetchexclude 'videos/**'

也可以同时使用黑白名单规则,这样只有同时满足 include 规则和 exclude 规则的大文件才会被获取:

git config lfs.fetchinclude 'videos/**'

git config lfs.fetchexclude 'videos/chameleon.mp4'

# 在此例中,如此配置将只会获取 videos/iguana.webm 一个文件。

一次获取 LFS 对象的最近版本

Git LFS 相关命令在获取 LFS 对象时,默认仅会获取该对象当前被引用的版本,如果想要一次获取 LFS 对象的当前及最近版本的话,我们首先需要对最近进行定义:

git config lfs.fetchrecentcommitsdays 7

7 表示同时下载过去 7 天内的版本(相对于获取的 LFS 对象的时间),该项配置默认值为 0,即不获取过去的版本,而仅获取指定的版本。

有了对最近的定义后,我们可以选择在执行 git lfs fetch 命令时,加上 --recent 参数以同时获取最近版本;

或者配置

git config lfs.fetchrecentalways true

从而总是同时获取 LFS 对象的最近版本。

常见问题

在安装 Git LFS 之前,克隆了使用 Git LFS 的仓库,则被 Git LFS 管理的文件会被显示为文本指针,而非具体的文件。

查看这些文件指针,会发现类似如下内容:

version https://git-lfs.gitee.com/spec/v1

oid sha256:4b99dbe6fe6f646b2026de93481045bbf34f995559db15fce34d192f1f320ef4

size 156154

解决办法就是,手动执行获取 Git LFS 对象的命令:

git lfs fetch

git lfs checkout

# 或

git lfs pull

Git LFS 对象在本地仓库的存放位置?

通过 Git LFS 所管理的对象实际在本地的存储位置是在 .git/lfs/objects 目录下,该目录根据对象的 sha256 值来组织。

作为对比,Git 自身所管理的对象则是存储在 .git/objects 目录下,根据 commit, tree, blob, tag 的 sha1 值来组织。

已经使用 git lfs track somefile 追踪了某个文件,但该文件并未以 LFS 存储。

如果被 LFS 追踪管理的文件的大小为 0 的话,则该文件不会以 LFS 的形式存储起来。

只有当一个文件至少有 1 个字节时,其才会以 LFS 的形式存储。

注:一般使用 LFS 时,我们也不会用其追踪空文件,即使追踪了空文件,对于使用也没有任何影响。提到这点主要是为了消除在测试使用 LFS 时可能遇到的困惑。

执行 git lfs fetch 或 git lfs pull 时报错

batch request: exitstatus 255: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

如果在克隆仓库时使用了 SSH 协议,而本地的 SSH 私钥又有密码保护,那么向服务器获取文件时就会报错,因为目前 Git LFS 不会向用户请求密码,从而导致认证失败。

解决办法是使用 ssh-add 命令,预先加载好本地的 SSH 私钥,从而使得 Git LFS 能够访问到私钥。

GitLFS 参考文章

git lfs linux,Git LFS 操作指南相关推荐

  1. windows git and linux git lib operater

    windows git ssh生成git ssh key 配置 git clone  use SSH网址 git config --global --list 查看是否已配置 git config - ...

  2. git flow linux,Git Flow简介

    Git Flow是什么? Git Flow是一套基于git的工作流程,这个工作流程围绕着project的发布(release)定义了一个严格的如何建立分支的模型. Git建分支是非常cheap的,我们 ...

  3. 使用 git 下载linux 源码

    1)进入源码官网 https://www.kernel.org/ 页面如下: 2)主线的git 地址,当点mainline 后面的 "browse "时,如下: 点一下,企鹅右边的 ...

  4. git: ‘lfs‘ is not a git command. See ‘git --help‘的解决方案

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  5. linux git文件图标,分享|三款 Linux 下的 Git 图形客户端

    了解这三个 Git 图形客户端工具如何增强你的开发流程. 在 Linux 下工作的人们对 Git 非常熟悉.一个理所当然的原因是,Git 是我们这个星球上最广为人知也是使用最广泛的版本控制工具.不过大 ...

  6. Git 在 Linux 上和 windows 上的安装

    1. 在 Linux 上安装 // Centos 上安装 $ yum -y install https://repo.ius.io/ius-release-el7.rpm $ yum -y insta ...

  7. linux git管理工具,分享|三款 Linux 下的 Git 图形客户端

    了解这三个 Git 图形客户端工具如何增强你的开发流程. 在 Linux 下工作的人们对 Git 非常熟悉.一个理所当然的原因是,Git 是我们这个星球上最广为人知也是使用最广泛的版本控制工具.不过大 ...

  8. linux ubuntu 安装git服务器,[linux] Ubuntu20.04上安装搭建私有Git服务器Gitea

    [linux] Ubuntu20.04上安装搭建私有Git服务器Gitea [linux] Ubuntu20.04上安装搭建私有Git服务器Gitea Gitea 是相比于gitlab更加轻量化,而且 ...

  9. linux下git的HEAD,Git工具详解以及与GitHub的配合使用

    git安装 linux上的安装 [cpp] view plaincopy yum install git windows上的安装 http://git-scm.com/download/win 下载安 ...

  10. Linux查看历史信息代码,使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录

    Linux kernel  的官方 GIT地址是: 可以从这个地址拿到 kernel 的 代码仓库. 1. 拿代码仓库 git clone git://git.kernel.org/pub/scm/l ...

最新文章

  1. docker监控系统
  2. Linux网络 - 数据包的发送过程
  3. 西安python培训班多少钱-西安中公python培训班靠谱吗
  4. SessionHelper
  5. CentOS 安装中文语言包 教程
  6. 注意Chart control 中ispostback 的使用
  7. 打字方式异于常人,可能脑子有病丨AI研究
  8. SlideSwitch仿iphone滑动开关组件,仿百度魔图滑动开关组件Android
  9. 如何打开 Mac 的摄像头?
  10. Zint生成二维码环境搭建
  11. 记录String.valueOf()和toString()注意问题
  12. MACD底背离选股公式——通达信、同花顺
  13. c语言保龄球计分程序,保龄球规则-保龄球比赛计分方法是怎样的? 爱问知识人...
  14. (二十一)查询我的订单
  15. tcp-ip网络模型-物理层
  16. 概率统计Python计算:F分布分位点计算
  17. Taro引入阿里图标
  18. 为你开发的应用赋能文档协作功能
  19. Kubernetes volumes简介
  20. Opencv 原图像素坐标点透视变换后对应坐标点

热门文章

  1. latch:cbc等待
  2. 东静给排水CAD绘图辅助软件(LBJ2019)
  3. hbase scan超时设置_hbase scan limit 10
  4. php中超链接怎么去下划线的,html如何去掉超链接下划线?html超链接去掉下划线的方法介绍...
  5. 人工智能:python 实现 第十章,NLP 第一天 入门介绍及使用stemming还原词汇
  6. JWT全面解读、使用步骤
  7. 安装Dreamweaver CS5遇到的问题
  8. 【MySQL】数据库基础_frank_fuckppt
  9. 高德地图JS-API开发—Marker添加及infoWindow处理
  10. 分析方法论_用户生命周期的建立