Git LFS

管理音频、视频和图形等大型文件一直是Git的缺点之一。一般建议Git存储库的大小不要超过1GB,以保持性能。

Git LFS跟踪状态

在Git LFS跟踪的文件上显示LFS图标,以指示文件是存储为blob还是存储为LFS指针。

它是如何工作的

Git LFS客户端通过HTTPS与GitLab服务器通信。它使用HTTP基本身份验证来授权客户端请求。一旦请求被授权,Git LFS客户端就会收到在哪里获取或在哪里推送大文件的指令。

GitLab服务器配置

GitLab实例管理员的文档在下面LFS管理文件

需求

  • GitLab从8.2版开始支持Git LFS
  • Git LFS必须在项目设置下启用
  • Git LFS客户端1.0.1及以上版本

已知的限制

  • Git LFS v1原始API不受支持,因为它在LFS开发早期就已弃用
  • 当SSH被设置为远程时,Git LFS对象仍然通过HTTPS
  • 任何Git LFS请求都会要求提供HTTPS凭据,因此建议使用好的Git凭据存储
  • Git LFS总是假设HTTPS,所以如果你在HTTP上有GitLab服务器,你必须手动将URL添加到Git配置中故障排除

请注意:在8.12中,GitLab增加了对SSH的LFS支持。Git LFS通信仍然通过HTTP,但是现在SSH客户端将正确的凭据传递给Git LFS客户端,因此用户不需要做任何操作。

使用Git LFS

让我们看看当你需要用Git LFS将大文件签入Git存储库时的工作流程。例如,如果你想上传一个非常大的文件并将其签入Git存储库:

Git克隆git@gitlab.example.com:group/project.gitgit lfs安装#初始化Git LFS项目Git LFS跟踪“* iso”#选择要作为大文件处理的文件扩展名

一旦某个文件扩展名被标记为LFS对象,你就可以像往常一样使用Git,而不必重做命令来跟踪具有相同扩展名的文件:

cp~ / tmp / debian。iso。/#复制一个大文件到当前目录git添加#添加大文件到项目中git提交"新增Debian iso"#提交文件元数据Git push origin master#同步git repo和大文件到GitLab服务器

请注意:确保.gitattributes由git跟踪。否则Git LFS将无法为克隆项目的人正常工作。

Git添加.gitattributes

克隆存储库的工作与以前相同。Git自动检测lfs跟踪的文件并通过HTTP克隆它们。如果使用SSH URL执行git clone命令,则必须输入用于HTTP身份验证的GitLab凭据。

Git克隆git@gitlab.example.com:group/project.git

如果您已经克隆了存储库,并且希望获得远程存储库上的最新LFS对象,例如。从分支

Git LFS获取master

文件锁定

介绍了在GitLab 10.5中。

在使用文件锁定之前,要做的第一件事是告诉Git LFS哪种文件是可锁定的。以下命令将PNG文件存储在LFS中,并将其标记为可锁定:

Git LFS跟踪“* . png”——可锁定的

执行上述命令后,文件名为.gitattributes将创建或更新以下内容:

. png过滤器lfsdifflfs合并lfs语境可锁定的

您也可以在不使用LFS的情况下将文件类型注册为可锁定(为了能够锁定/解锁文件,您需要一个实现LFS文件锁定API的远程服务器),为了做到这一点,您可以编辑.gitattributes文件手动:

. pdf可锁定的

当一个文件类型被注册为可锁定后,Git LFS会在文件系统上自动将其设置为只读。这意味着您需要在编辑该文件之前锁定该文件。

管理锁定文件

一旦你准备好编辑你的文件,你需要先锁定它:

Git LFS锁图片/banner.png锁定图像/ banner.png

这将在服务器上注册以您的名字锁定的文件:

Git LFS锁图片/banner.png joe ID:123

一旦你推送了你的更改,你可以解锁文件,这样其他人也可以编辑它:

Git LFS解锁images/banner.png

您也可以通过id解锁:

Git LFS解锁- - - id123

如果出于某种原因需要解锁未被您锁定的文件,可以使用——力只要你有项目权限:

Git LFS解锁- - - id123——力

故障排除

错误:存储库或对象未找到

出现这种错误的原因有几个:

  • 您没有访问某个LFS对象的权限

检查是否具有向项目推送或从项目获取的权限。

  • 项目不允许访问LFS对象

您试图推到项目或从项目中获取的LFS对象不再对项目可用。该对象可能已从服务器中删除。

  • 本地git存储库正在使用废弃的LFS API

无效状态< url >: 501

Git LFS会将失败记录到日志文件中。在项目目录下查看此日志文件:

Git LFS最后记录日志

如果状态错误501所示,是因为:

  • Git LFS在项目设置中未启用。检查项目设置并启用Git LFS。

  • GitLab服务器上未启用Git LFS支持。与您的GitLab管理员检查为什么服务器上没有启用Git LFS。看到LFS管理文档以了解如何启用LFS支持。

  • GitLab服务器不支持Git LFS客户端版本。检查你的Git LFS版本Git LFS版本.检查项目的Git配置,查看已弃用API的痕迹Git LFS -l.如果Batch = false,删除该行,并尝试更新您的Git LFS客户端。仅支持1.0.1及更新版本。

Getsockopt拒绝连接

如果你将一个LFS对象推到一个项目,你会收到一个类似于以下的错误:Post /info/lfs/objects/batch: dial tcp IP: getsockopt: connection refused, LFS客户端试图通过HTTPS到达GitLab。但是,您的GitLab实例是通过HTTP提供服务的。

此行为是由Git LFS默认使用HTTPS连接引起的lfsurl在Git配置中没有设置。

为了防止这种情况发生,在Git项目配置中设置lfs url:

git配置——添加lfs.url“http://gitlab.example.com/group/project.git/info/lfs”

推送对象时总是需要凭据

请注意:在8.12中,GitLab增加了对SSH的LFS支持。Git LFS通信仍然通过HTTP,但是现在SSH客户端将正确的凭据传递给Git LFS客户端,因此用户不需要做任何操作。

鉴于Git LFS使用HTTP基本身份验证在每个对象的每次推送时对推送LFS对象的用户进行身份验证,因此需要用户HTTPS凭据。

默认情况下,Git支持记住您使用的每个存储库的凭据。这在Git凭证手册

例如,您可以告诉Git记住密码一段时间,在这段时间内您将推送对象:

git配置——全球credential.helper“缓存——timeout = 3600”

这将记住一个小时的凭据,之后Git操作将需要重新验证。

如果你使用的是OS X,你可以使用osxkeychain存储和加密您的凭证。对于Windows,您可以使用wincred或微软的Git凭证管理器的Windows

关于存储用户凭证的各种方法的更多详细信息,可以在Git凭证存储文档

推送时LFS对象缺失

GitLab检查文件以检测推送时的LFS指针。如果检测到LFS指针,GitLab将尝试验证这些文件是否已经存在于GitLab上的LFS中。

验证LFS在本地安装,并考虑手动推送Git LFS push——全部

如果你在GitLab之外存储LFS文件,你可以通过设置在项目中禁用LFSlfs_enabled:假项目的api

外部托管LFS对象

通过设置自定义LFS url,可以在外部托管LFS对象Git配置-f .lfsconfig lfs。url https://example.com/ <项目> . /信息/ lfs

因为GitLab验证LFS指针引用的对象是否存在,所以当项目启用LFS时,push将失败。

方法禁用LFS项目设置

Baidu
map