Git 大文件存储将帮助 Git 处理大型二进制文件

  • Sergio De Simone
  • 梁杰

2015 年 4 月 17 日

话题:GitHubDevOps语言 & 开发文化 & 方法

GitHub 宣布,作为开源的 Git 扩展,Git 大文件存储(Large File Storage,简称 LFS)的目标是更好地把“大型二进制文件,比如音频文件、数据集、图像和视频”集成到 Git 的工作流中。

众所周知,Git 在存储二进制文件时效率不高,因为:

Git 默认会压缩并存储二进制文件的所有完整版本,如果二进制文件很多,这种做法显然不是最优。

Git LFS 处理大型二进制文件的方式是用“文本指针”替换它们。这些文本指针实际上是包含二进制文件信息的文本文件。文本指针存储在 Git 中,而大文件本身通过 HTTPS 托管在Git LFS 服务器上。

Git LFS 向 Git 中添加了一条新命令lfs,支持以下参数:

  • config:显示 Git LFS 的配置。
  • init:初始化 Git LFS。
  • logs:显示 git-lfs 中的错误。
  • track:向 Git 仓库中添加一个大文件;允许指定文件扩展名。
  • untrack:从 Git LFS 中移除一个文件。
  • push:把当前监控的文件推送到 Git LFS 服务器。
  • status:显示产生改动的 Git LFS 对象的路径。

如果要向现有仓库中添加一个大文件,你可以:

git lfs track "*.pdf"
git add file.pdf
git commit -m "Add design file"
git push origin master

根据 GitHub 官方消息,目前 Git LFS 服务器 API 的实现只有两种:引用服务器实现以及 GitHub.com,后者目前还不可用。GitHub 已经公布了免费的 LFS 计划,最多允许“1GB 免费文件存储空间和每月 1GB 流量”。容量更大的套餐需要付费,但是具体费用还未公布。

在 Git LFS 出现之前,开发者就已经可以使用git-annex管理大型二进制文件。后者是一个 Git 扩展,原理和 Git LFS 类似,把文件内容存储在.git/annex 中,而把对应位置的符号链接存储在 Git 仓库中。

查看英文原文: Git Large File Storage Promises to Extend Git to Large Binary Files


感谢邵思华对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流。

GitHubDevOps语言 & 开发文化 & 方法