Git LFS 入门指南

出于好意:设计团队开始把他们大尺寸的图形文件添加到你的项目仓库当中,然而引起的结果是,你看着仓库不断增大直到数 GB 大小......

在 GIT 中以二进制文件来运行确实是一种明智的做法,每当提交一个 100MB 的 Photoshop 文件中的细微改变,你仓库的大小当然也会增长 100MB,这样快速的增长会使你的仓库因为内容太过于庞大而变得几乎无法使用。

但是,如果说不使用版本控制你的设计/概念/视频/音频/可执行文件/<other-large-file-use-case>工作也不能解决问题(知识库过大)。一般来说,版本控制的好处还是存在的,而且应该用于各种各样的项目当中去。

幸运的是,这有一个 GIT 扩展可以让使用大型文件更加有效率,跟“Large File Storage”(或者叫"LFS",如果你喜欢这个简称)问个好吧。

没有 LFS:臃肿的仓库

在我们着眼于 LFS 如何创造奇迹之前,我们先进一步看一个实际的问题,以简单的网站项目为例:

如上图所示,并没什么特别:一些 HTML,CSS 和 JS 文件和几个小的图像资源。然而,目前我们还没有把我们的设计资源(Photoshop,Sketch,etc.)包括进来,把设计资源加入版本控制会使它更加有意义。

然而,关键在于:每次我们的设计发生变化(无论多小),都会另外提交 100MB 到我们的仓库中,很快,我们仓库就会从 MB 变成 GB 了,这就会使克隆和复制编程异常冗长。

虽然我只讨论了“设计”的文件,但它确实与所有"大"文件有关:如视频,音频记录,数据集等的问题。

使用 LFS : 有效的处理大文件

当然,LFS 并不能像"变魔术一样"处理所有的大型数据:它需要记录并保存每一个变化。然而,这就把负担转移给了远程服务器 - 允许本地仓库保持相对的精简。

为了实现这个可能,LFS 耍了一个小把戏:它在本地仓库中并不保留所有的文件版本,而是仅根据需要提供检出版本中必需的文件。

但这引发了一个有意思的问题:如果这些庞大的文件本身没有出现在你的本地仓库中....改用什么来代替呢? LFS 保存轻量级指针中有真实的文件数据。当你用一个这样的指针去迁出一个修订版时,LFS 会很轻易地找到源文件(不在他上面可能就在服务器上,特殊缓存)然后你下载就行了。

因此,你最终只会得到你真正想要的文件 - 而不是一些你可能永远都不需要冗余数据。

安装 LFS

LFS 尚未加入 Git 的核心二进制文件,但是它可以作为扩展使用。这意味着,使用之前我们需要提前安装。

服务端

目前并不是所有主机服务器都支持 LFS。 但如果你是 GitLab 用户就不必担心。如果你使用 GitLab.com 或 GitLab CE 或 EE 的中间版本,它们已经支持LFS了! 您的管理员只需要开启LFS选项。

本地机器

你本地安装的 Git 也需要支持 LFS。 如果你使用 Tower,一个 Git 桌面客户端,你就不需要额外安装了,因为 Tower 已经非常好地支持 Git 大文件系统。

如果你使用命令行来运行 Git,可以选择以下方法来安装 LFS:

  • 二进制安装包:最新版本的 binary packages, 支持 Windows,Mac,Linux 以及 FreeBSD 。

  • Linux:Debian 和 RPM 的软件包可从 PackageCloud 获得。

  • macOS:你可以使用 Homebrew 执行“brew install git-lfs”来安装,也可以使用 MacPorts 执行“port install git-lfs”安装.

  • Windows:你可以使用包管理器 Chocolatey 执行“choco install git-lfs”来安装。

等你的包管理器完成上述安装后,你还需要执行“lfs install”命令:

git lfs install

使用 LFS 追踪文件

没有特别说明的情况下,LFS 不会处理大文件问题,因此,我们必须明确告诉 LFS 该处理哪些文件。

让我们回到“大 Photoshop 文件”的示例, 我们可以使用“lfs track”命令来告诉 LFS 处理“design.psd”文件:

git lfs track "design-resources/design.psd"

乍一看,这条命令好像没生效,不过,你会看到项目根目录下新建了一个新文件 ".gitattributes" (如果已存在,将会被修改),".gitattributes" 文件记录了我们用 LFS 追踪的所有的文件路径。

cat .gitattributes
design-resources/design.psd filter=lfs diff=lfs merge=lfs -text

棒棒哒!在这之后 LFS 会处理这个文件。我们接下来只要像往常那样把这个文件提交到仓库。值得注意的是,".gitattributes" 文件也需要提交到仓库,操作和提交其他修改文件一样:

git add .gitattributes
git add design-resources/design.psd
git commit -m "Add design file"

追踪文件路径

添加单一文件如上所示就可以。但是,比如说,如果你想追踪项目里所有后缀名为 indd 的文件呢?放心,你不用手动的添加每个文件。LFS 允许你定义文件路径,就像忽略文件时的用法那样。举个例子,下面的命令会告诉 LFS 追踪所有的 InDesign 文件 — 已经存在的和以后添加的。

git lfs track "*.indd"

你也可以告诉 LFS 追踪整个文件夹里的所有内容:

git lfs track "design-assets/*"

追踪文件概述

有时候,你可能想知道到底有哪些文件在被 LFS 追踪。你可以简单的看看.gitattributes文件。然而,它们不是真实的文件,而是包含一些规则和理论的文件:某些文件可能会漏掉,例如由于拼写错误或者过分严格的规则。

想要查看你当前正在追踪的实际文件的列表,可以使用 git lfs ls-files 命令:

git lfs ls-files
194dcdb603 * design-resources/design.psd

尽早追踪

记住 LFS 并没有改变 git 本身的原理:被提交到仓库中的文件还会留在那儿。改变项目的提交历史很困难(也有风险)。

这意味着你应该在文件没有提交到仓库前就让 LFS 进行追踪。

不然,它就成了项目历史的一部分 - 令项目增大数 MB 或数 GB 的大小...

初始化仓库时要选择配置要追踪的文件规则的完美时机(就跟配置忽略文件一样)。

通过图形化工具使用 LFS

尽管 LFS 使用起来并不困难,但是还是需要记住一堆命令和,处理一些事情。 如果你想更高效地使用 Git(还有 LFS),可以看一下 Tower,Mac 和 Windows 上的一个 Git 桌面客户端。现在 Tower 已经内置支持 Git LFS,不需要再安装任何东西。这个应用已经面市了数年并得到了世界各地约 80,000 的用户的支持和信赖。

另外, Tower 可以直接与 Gitlab 集成!使用 Tower 连接到你的 GitLab 账号后,你就可以点下鼠标来克隆和创建仓库啦。

使用 Git

LFS 有一个很赞的特点是,可以像之前一样保留正常的 Git 工作流程:暂存,提交,push,pull 和其他所有的操作。 除了我们讨论过的命令,没有什么需要额外注意的了。

LFS 将在你需要时提供所需的文件。

如果你正在寻找有关 LFS 的更多信息,请看看这本免费在线书。 有关 Git 的常用技巧,请参阅 Git Tips&Tricks 中发布的博文和 Tower 的视频系列。

关于 Guest 的作者

本文是由 Tobias Günther 撰写,是 Tower Git client 团队的一员,发布在用户文章中。

Git LFS 入门指南相关推荐

  1. git语言包安装_Git分布式版本管理系统快速入门指南

    为什么要使用版本管理系统 无论有没有使用过专业化工具,每个人都或多或少地有版本管理的需求.我们在做论文.写报告或者设计方案时,因为难以避免的不断改动,总会形成很多个不同的版本,我们可能会用" ...

  2. 使用libFuzzer fuzz Chrome V8入门指南

    本文讲的是使用libFuzzer fuzz Chrome V8入门指南, 什么是V8?  V8(也称为Chrome V8)是由Chromium Project开发的用于Google Chrome浏览器 ...

  3. Ansible 入门指南 - ansible-playbook 命令

    上篇文章Ansible 入门指南 - 安装及 Ad-Hoc 命令使用介绍的额是 Ad-Hoc 命令方式,本文将介绍 Playbook 方式. Playbook 译为「剧本」,觉得还挺恰当的. play ...

  4. Steeltoe 2.4新增代码生成工具、全新入门指南等,助力.NET微服务开发

    Steeltoe框架现可帮助.NET开发人员创建云原生应用.随着其功能的扩充,该框架越来越受欢迎,下载量达到580万(并且仍在增加),这其中大部分的功能创新都源自于用户反馈.社区贡献和.NET运行环境 ...

  5. macos安装vscode_VS Code 代码编辑器入门指南:核心组件与概念

    作者:思考问题的熊 写在前面 如果当电脑只能装一个软件还需要尽量不影响日常学习工作时,不知道你的选择会是什么.我把这个看似「荒诞」的问题理解为「All-in-One」的升级版拷问. 这个问题陪伴了我很 ...

  6. aws python库_适用于Alexa的新AWS Python SDK入门指南

    aws python库 by Ralu Bolovan 由Ralu Bolovan 适用于Alexa的新AWS Python SDK入门指南 (A Beginner's guide to the ne ...

  7. html怎样使用ui套件,weui框架组件小白入门指南:如何安装使用weui.js?

    本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 苏南大叔在本文中说说腾讯的weui这个前端框架的基本使用方法.这款框架已经问世有几年的时间了,因为其可以把微信 ...

  8. python入门指南_Python实时对象检测入门指南

    python入门指南 多年来,研究人员一直在研究赋予机器以视觉识别和识别物体的能力的可能性. 这个称为计算机视觉或CV的特定领域具有广泛的现代应用程序. 从被自动驾驶汽车用于道路目标检测到复杂的面部和 ...

  9. Git 经验总结及 Git GitHub 学习指南

    1. 前言 本文主要分为两部分,前一部分是本人学习和工作中使用 Git 的总结经验,后半部分是总结的 Git & GitHub 的学习指南.如果想直接体系学习,可以直接按照指南路线学习.如果你 ...

最新文章

  1. webService、webSocket、socket、http之间的区别
  2. 2022年人才市场洞察及薪酬指南:观势、观薪、观心
  3. rdd数据存内存 数据量_技术分享|大数据技术初探之Spark 任务调度与优化
  4. NYOJ 40 公约数和公倍数
  5. 中兴e8820刷openwrt_中兴E8820V2(电信天翼宽带类似新路由3歌华链)-拆机及OpenWrt固件...
  6. Springboot整合redis切库问题
  7. 大数据技术具备哪些特点
  8. 【人工智能 AI】机器学习快速入门教程(Google)
  9. 综述:阿尔茨海默病的神经振荡和脑刺激
  10. SSM源码分析之Spring02-Spring源码分析前瞻
  11. App store暂时下架应用的解决方案
  12. 趣图:网络延迟的危害...
  13. [Selenium] Selenium定向爬取海量精美图片及搜索引擎杂谈
  14. 解读CVPR2020图像翻译最新算法
  15. 11-18复盘 济南市swtd
  16. dynamic web module version 3.0
  17. Hgame-Week3
  18. MiniGPT-4 发布
  19. 本人薛广涛,2004年毕业于上海交通大学计算机系软件与理论专业,中国计算机学会YOCSEF专题论坛-传感器网络论坛-20100410...
  20. 群晖用docker安装花生壳

热门文章

  1. 实现时间的计算: 要求用户输入身份证号,若格式有误,要求其重新输入。然后根据身份证号码输出20岁生日所在周的周三的日期
  2. VVC学习之五:帧内预测之色度预测——CCLM及代码学习
  3. Linux环境开机自启动
  4. linux系统如何设置程序开机自启动
  5. 计算机怎么登录用户名和密码忘了怎么办,忘记了路由器的登录用户名与密码怎么办...
  6. Vue.js 学习笔记十二:Vue CLI 之创建一个项目
  7. 阿里云域名实名认证状态查询
  8. 空间坐标转化——三维转二维
  9. 以自己的电脑作为服务器,搭建网站,外网可访问
  10. java 获取区间随机数_Java获取随机数