Git 大文件存储(LFS)
极狐 GitLab 大文件存储 (LFS) 是一个开源的 Git 扩展,帮助 Git 仓库高效地管理大型二进制文件。Git 无法像跟踪文本文件的更改那样跟踪二进制文件(如音频、视频或图像文件)的更改。文本文件可以生成纯文本差异,而对二进制文件的任何更改都需要 Git 完全替换仓库中的文件。对大文件的重复更改会增加仓库的大小。随着时间的推移,这种大小的增加可能会减慢常规 Git 操作,如 clone、fetch 或 pull。
使用极狐 GitLab LFS 将大型二进制文件存储在 Git 仓库之外,仅留下一个小的文本指针供 Git 管理。当您使用极狐 GitLab LFS 将文件添加到仓库时,极狐 GitLab:
-
将文件添加到项目配置的对象存储中,而不是 Git 仓库。
-
将指针添加到 Git 仓库中,而不是大文件。指针包含有关文件的信息,例如:
plaintextversion https://git-lfs.github.com/spec/v1 oid sha256:lpca0iva5kpz9wva5rgsqsicxrxrkbjr0bh4sy6rz08g2c4tyc441rto5j5bctit size 804
- Version - 使用的极狐 GitLab LFS 规范的版本
- OID - 使用的哈希方法和唯一对象 ID,格式为 {hash-method}:{hash}。
- Size - 文件大小,以字节为单位。
-
队列化一个作业以重新计算项目的统计信息,包括存储大小和 LFS 对象存储。LFS 对象存储是与仓库关联的所有 LFS 对象的大小总和。
使用 Git LFS 管理的文件在文件名旁边显示一个 LFS 徽章:
极狐 GitLab LFS 客户端使用 HTTP 基本身份验证,并通过 HTTPS 与服务器通信。在您验证请求后,极狐 GitLab LFS 客户端会收到有关从何处获取(或推送)大文件的说明。
Git 仓库保持较小,有助于您遵循仓库大小限制。有关更多信息,请参阅极狐 GitLab 私有化部署的仓库大小限制和极狐 GitLab SaaS 的仓库大小限制。
理解极狐 GitLab LFS 如何与分叉一起工作
当您分叉一个仓库时,您的分叉包含了在您分叉时上游仓库现有的 LFS 对象。如果您向分叉中添加新的 LFS 对象,它们仅属于您的分叉,而不属于上游仓库。总对象存储仅为您的分叉增加。
当您从分叉向上游项目创建合并请求,并且您的合并请求包含新的极狐 GitLab LFS 对象时,极狐 GitLab 在合并后将新 LFS 对象与上游项目关联。
为项目配置极狐 GitLab LFS
- Tier: 基础版、专业版、旗舰版
- Offering: 极狐 GitLab 私有化部署、极狐 GitLab Dedicated
极狐 GitLab 默认启用极狐 GitLab LFS,适用于极狐 GitLab 私有化部署和极狐 GitLab SaaS。它提供了服务器设置和项目特定设置。
-
要在您的实例上配置极狐 GitLab LFS,例如设置远程对象存储,请参阅极狐 GitLab 大文件存储 (LFS) 管理。
-
要为特定项目配置极狐 GitLab LFS:
- 在本地仓库副本的根目录中运行 git lfs install。此命令添加:
- 一个 pre-push Git 钩子到您的仓库。
- 一个 .gitattributes 文件来跟踪单个文件和文件类型的处理。
- 添加您要使用极狐 GitLab LFS 跟踪的文件和文件类型。
- 在本地仓库副本的根目录中运行 git lfs install。此命令添加:
启用或禁用项目的极狐 GitLab LFS
极狐 GitLab LFS 默认启用,适用于极狐 GitLab 私有化部署和极狐 GitLab SaaS。
先决条件:
- 您必须至少拥有项目的开发者角色。
要启用或禁用项目的极狐 GitLab LFS:
- 在左侧边栏中选择 搜索或转到 并找到您的项目。
- 选择 设置 > 常规。
- 展开 可见性、项目功能、权限 部分。
- 选择 Git 大文件存储 (LFS) 开关。
- 选择 保存更改。
添加和跟踪文件
您可以将大文件添加到极狐 GitLab LFS。这样可以帮助您管理 Git 仓库中的文件。当您使用极狐 GitLab LFS 跟踪文件时,它们在 Git 中被替换为文本指针,并存储在远程服务器上。有关更多信息,请参阅极狐 GitLab LFS。
当您为项目配置极狐 GitLab LFS时,确保在项目的根目录中有一个 .gitattributes 文件。没有根级别的 .gitattributes 文件,即使您在项目子目录中正确配置了 LFS,UI 也会显示警告。有关更多信息,请参阅LFS 配置警告消息。
克隆使用极狐 GitLab LFS 的仓库
当您克隆一个使用极狐 GitLab LFS 的仓库时,Git 会检测到 LFS 跟踪的文件,并通过 HTTPS 克隆它们。如果您使用 SSH URL(如 user@hostname.com:group/project.git)运行 git clone,您必须再次输入您的极狐 GitLab 凭据以进行 HTTPS 身份验证。
默认情况下,即使 Git 通过 SSH 与仓库通信,极狐 GitLab LFS 操作也通过 HTTPS 进行。在极狐 GitLab 17.2 中,引入了LFS 的纯 SSH 支持。有关如何启用此功能的信息,请参阅纯 SSH 传输协议。
要为您已克隆的仓库获取新的 LFS 对象,请运行以下命令:
shellgit lfs fetch origin main
将现有仓库迁移到极狐 GitLab LFS
阅读 git-lfs-migrate 文档了解如何使用极狐 GitLab LFS 迁移现有的 Git 仓库。
从仓库历史中删除极狐 GitLab LFS 文件
理解在极狐 GitLab LFS 中取消跟踪文件与删除文件之间的区别很重要:
- 取消跟踪:文件仍然存在于磁盘和您的仓库历史中。如果用户检出历史分支或标签,他们仍然需要该文件的 LFS 版本。
- 删除:文件被移除,但仍然存在于您的仓库历史中。
要删除极狐 GitLab LFS 跟踪的文件,请参阅删除文件。
要完全清除文件的所有历史记录(过去和现在),请参阅处理敏感信息。
清除文件历史需要重写 Git 历史。此操作具有破坏性且不可逆。
删除大文件后减小仓库大小
如果您需要从仓库历史中删除大文件,以减少仓库的总大小,请参阅减少仓库大小。
相关主题
- 使用极狐 GitLab LFS 设置独占文件锁。
- 博客文章:极狐 GitLab LFS 入门
- 极狐 GitLab LFS 与 Git
- 极狐 GitLab LFS 开发者信息
- 极狐 GitLab 大文件存储 (LFS) 管理 适用于极狐 GitLab 私有化部署
- 极狐 GitLab LFS 故障排除
- .gitattributes 文件