名称

git-backfill - 在部分克隆中下载缺失的对象

概要

git backfill [--min-batch-size=<n>] [--[no-]sparse]

描述

无blob的部分克隆是使用 git clone --filter=blob:none 创建的,然后配置本地仓库,以便 Git 客户端避免下载 blob 对象,除非本地操作需要它们。这最初意味着克隆和后续的 fetch 操作会下载可达的提交和树,但不会下载 blob。稍后改变 HEAD 指针的操作,例如 git checkoutgit merge,可能需要下载缺失的 blob 才能完成其操作。

在最坏的情况下,计算 blob 差异的命令,例如 git blame,会变得非常慢,因为它们以单blob请求下载缺失的 blob,以满足 Git 命令所需的缺失对象。这会导致多次下载请求,并且 Git 服务器无法对这些对象提供增量压缩。

git backfill 命令提供了一种方式,让用户请求 Git 下载缺失的 blob(可带可选的过滤器),以便代表文件历史版本的缺失 blob 可以分批下载。backfill 命令尝试通过将同一路径上出现的 blob 进行分组来优化请求,有望在服务器发送的 packfile 中实现良好的增量压缩。

通过这种方式,git backfill 提供了一种将大型克隆分解为更小块的机制。首先使用 git clone --filter=blob:none 进行无blob的部分克隆,然后在本地仓库中运行 git backfill,提供了一种通过多次较小的网络调用来下载所有可达对象的方法,而不是在克隆时下载整个仓库。

默认情况下,git backfill 下载从 HEAD 提交可达的所有 blob。此集合可以通过各种选项进行限制或扩展。

此命令是实验性的。其行为未来可能会改变。

选项

--min-batch-size=<n>

指定从服务器请求的缺失对象批处理的最小大小。此大小可能会被给定路径上看到的最后一组 blob 超出。默认的最小批处理大小是 50,000。

--[no-]sparse

仅当对象出现在与当前稀疏检出匹配的路径时才下载。如果稀疏检出功能已启用,则假定使用 --sparse,并且可以使用 --no-sparse 禁用它。

另请参阅

GIT

Git[1] 套件的一部分

scroll-to-top