Git LFS
管理音频、视频和图形等大型文件一直是Git的缺点之一。一般建议Git存储库的大小不要超过1GB,以保持性能。
在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过滤器=lfsdiff=lfs合并=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解锁- - - id=123
如果出于某种原因需要解锁未被您锁定的文件,可以使用——力
只要你有主
项目权限:
Git LFS解锁- - - id=123——力
故障排除
错误:存储库或对象未找到
出现这种错误的原因有几个:
- 您没有访问某个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
, 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项目设置.