- 了解 Git LFS 如何与派生仓库一起工作
- 为项目配置 Git LFS
- 为项目启用或禁用 Git LFS
- 添加并追踪文件
- 使用 Git LFS 来克隆仓库
- 从仓库历史中删除 Git LFS 文件
- 移除大文件后减小仓库尺寸
- 相关主题
Git 大文件存储 (LFS)
Git 大文件存储(LFS)是 Git 的一个开源扩展,可以帮助 Git 仓库高效管理大文件。Git 无法想追踪文本文件一样跟踪二进制文件的变更(诸如音频、视频或图片文件)。因为文本文件可以生成纯文本差异,二进制文件则需要完全替换文件。大文件的重复变更会增加您仓库的尺寸。随着时间的推移,这种尺寸的增加会减慢 clone
、fetch
或 pull
等常规 Git 操作的速度。
使用 Git LFS 将大文件存储在您的 Git 仓库之外,只保留小的文本指针让 Git 来管理。当您将文件添加到您的仓库时,极狐GitLab 会:
- 添加文件到您项目的配置对象存储中,而不是 Git 仓库。
-
添加一个指针到您的 Git 仓库,而不是大文件。指针包含有关您的文件的信息,如下所示:
version https://git-lfs.github.com/spec/v1 oid sha256:lpca0iva5kpz9wva5rgsqsicxrxrkbjr0bh4sy6rz08g2c4tyc441rto5j5bctit size 804
- 版本 - Git LFS 规范的版本
-
OID - 使用的哈希方法和唯一的对象 ID,格式为
{hash-method}:{hash}
。 - Size - 文件大小,以字节为单位。
- 队列化一个作业来重新计算您项目的统计,包括存储大小和 LFS 对象存储。您的 LFS 对象存储是您仓库中所有 LFS 对象的大小之和。
使用 Git LFS 管理的文件会在文件名称边上显示一个 LFS 徽章:
Git LFS 客户端使用 HTTP Basic 认证并用 HTTPS 跟您的服务器通信。当您认证请求后,Git LFS 客户端会收到获取(或推送)大文件的指令。
您的仓库会保持小尺寸,这能够帮助您遵守仓库大小限制。更多详情,可查阅仓库限制,对于私有化,对于JihuLab.com。
了解 Git LFS 如何与派生仓库一起工作
当您派生一个仓库时,您的派生包括上游仓库的现有 LFS 对象。如果您向派生添加新的 LFS 对象,它们仅属于您的派生,而不是上游仓库。LFS 对象存储的总和仅增加您的派生。
当您从派生项目创建合并请求到上游项目时,而且您的请求包含一个新的 LFS 对象,则极狐GitLab 会在合并后将此新的 LFS 对象和 上游 项目关联起来。
为项目配置 Git LFS
极狐GitLab 默认为私有化实例和 JihuLab.com 启用 Git LFS。它提供了服务器设置和项目特定设置。
- 要在您的实例上配置 Git LFS,诸如设置远端对象存储,可查阅极狐GitLab Git 大文件存储 (LFS) 管理员。
-
要为特定项目配置 Git LFS:
- 在您的本地仓库中运行
git lfs install
。此命令添加:- 预推送 Git 钩子到您的仓库。
-
.gitattributes
文件来追踪文件和文件类型。
- 添加您想要使用 Git LFS 追踪的文件和文件类型。
- 在您的本地仓库中运行
为项目启用或禁用 Git LFS
默认情况下,Git LFS 已经在您的私有化实例和 JihuLab.com 上启用。
先决条件:
- 您必须至少具有项目的开发者角色。
要在项目级别启用或禁用 Git LFS:
- 在左侧边栏中,选择 搜索或前往,然后找到您的项目。
- 选择 设置 > 通用。
- 展开 可见性、项目功能和权限 部分。
- 选择 Git 大文件存储 (LFS) 旁边的切换按钮。
- 选择 保存更改。
添加并追踪文件
您可以为 Git LFS 添加大文件。这能够帮助您在 Git 仓库中管理文件。当您使用 Git LFS 追踪文件时,它们将被替换为 Git 中的文本指针,然后存储在远程服务器上。更多详情,可查阅 Git LFS。
使用 Git LFS 来克隆仓库
当您使用 Git LFS 来克隆仓库时,Git 会检测 LFS 追踪的文件并通过 HTTPS 克隆。如果您使用 SSH URL 来运行 git clone
,比如 git clone user@hostname.com:group/project.git
,您需要再次输入极狐GitLab 凭据进行 HTTPS 认证。
默认情况下,Git LFS 操作通过 HTTPS 进行,即使 Git 与您的仓库通过 SSH 进行通信。在极狐GitLab 17.2 中,引入了对于 LFS 的纯净(pure)SSH 支持。关于启用此功能的更多详情,可查阅纯净 SSH 转移协议。
要从您已经克隆的仓库来拉取新的 LFS 对象,运行如下命令:
git lfs fetch origin main
从仓库历史中删除 Git LFS 文件
了解 Git LFS 未追踪文件中的差异并删除文件是重要的:
- 未追踪:文件保留在磁盘和仓库历史中。如果用户检出历史分支或标签,他们仍然需要 LFS 版本的文件。
- 删除:文件被删除,但仍保留在仓库历史中。
要删除使用 Git LFS 追踪的文件,可查阅移除文件。
要完整删除文件历史,包括过去和现在,可查阅处理敏感信息。
移除大文件后减小仓库尺寸
如果您需要从仓库的历史中移除大文件,以减少仓库的整体尺寸,可查阅减少仓库尺寸。
相关主题
- 使用 Git LFS 来设置排除的文件锁.
- Git LFS
- 私有化部署实例的GitLab Git Large File Storage (LFS) 管理员
- Git LFS 故障排查
.gitattributes
文件