Git 大文件存储(LFS)

极狐 GitLab 大文件存储 (LFS) 是一个开源的 Git 扩展,帮助 Git 仓库高效地管理大型二进制文件。Git 无法像跟踪文本文件的更改那样跟踪二进制文件(如音频、视频或图像文件)的更改。文本文件可以生成纯文本差异,而对二进制文件的任何更改都需要 Git 完全替换仓库中的文件。对大文件的重复更改会增加仓库的大小。随着时间的推移,这种大小的增加可能会减慢常规 Git 操作,如 clonefetchpull

使用极狐 GitLab LFS 将大型二进制文件存储在 Git 仓库之外,仅留下一个小的文本指针供 Git 管理。当您使用极狐 GitLab LFS 将文件添加到仓库时,极狐 GitLab:

  1. 将文件添加到项目配置的对象存储中,而不是 Git 仓库。

  2. 将指针添加到 Git 仓库中,而不是大文件。指针包含有关文件的信息,例如:

    plaintext
    version https://git-lfs.github.com/spec/v1 oid sha256:lpca0iva5kpz9wva5rgsqsicxrxrkbjr0bh4sy6rz08g2c4tyc441rto5j5bctit size 804
    • Version - 使用的极狐 GitLab LFS 规范的版本
    • OID - 使用的哈希方法和唯一对象 ID,格式为 {hash-method}:{hash}
    • Size - 文件大小,以字节为单位。
  3. 队列化一个作业以重新计算项目的统计信息,包括存储大小和 LFS 对象存储。LFS 对象存储是与仓库关联的所有 LFS 对象的大小总和。

使用 Git LFS 管理的文件在文件名旁边显示一个 LFS 徽章:

Git LFS tracking status

极狐 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:

    1. 在本地仓库副本的根目录中运行 git lfs install。此命令添加:
      • 一个 pre-push Git 钩子到您的仓库。
      • 一个 .gitattributes 文件来跟踪单个文件和文件类型的处理。
    2. 添加您要使用极狐 GitLab LFS 跟踪的文件和文件类型。

启用或禁用项目的极狐 GitLab LFS#

极狐 GitLab LFS 默认启用,适用于极狐 GitLab 私有化部署和极狐 GitLab SaaS。

先决条件:

  • 您必须至少拥有项目的开发者角色。

要启用或禁用项目的极狐 GitLab LFS:

  1. 在左侧边栏中选择 搜索或转到 并找到您的项目。
  2. 选择 设置 > 常规
  3. 展开 可见性、项目功能、权限 部分。
  4. 选择 Git 大文件存储 (LFS) 开关。
  5. 选择 保存更改

添加和跟踪文件#

您可以将大文件添加到极狐 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 对象,请运行以下命令:

shell
git lfs fetch origin main

将现有仓库迁移到极狐 GitLab LFS#

阅读 git-lfs-migrate 文档了解如何使用极狐 GitLab LFS 迁移现有的 Git 仓库。

从仓库历史中删除极狐 GitLab LFS 文件#

理解在极狐 GitLab LFS 中取消跟踪文件与删除文件之间的区别很重要:

  • 取消跟踪:文件仍然存在于磁盘和您的仓库历史中。如果用户检出历史分支或标签,他们仍然需要该文件的 LFS 版本。
  • 删除:文件被移除,但仍然存在于您的仓库历史中。

要删除极狐 GitLab LFS 跟踪的文件,请参阅删除文件

要完全清除文件的所有历史记录(过去和现在),请参阅处理敏感信息

清除文件历史需要重写 Git 历史。此操作具有破坏性且不可逆。

删除大文件后减小仓库大小#

如果您需要从仓库历史中删除大文件,以减少仓库的总大小,请参阅减少仓库大小

相关主题#