git-backfill
在部分克隆中下载缺失的对象
概要
git backfill [--min-batch-size=<n>] [--[no-]sparse] [--[no-]include-edges] [<revision-range>]描述
无 blob 的部分克隆使用 git clone --filter=blob:none 创建,然后配置本地存储库,使 Git 客户端避免下载 blob 对象,除非本地操作需要它们。这最初意味着克隆和后续的 fetch 下载可访问的提交和树,但不下载 blob。后来更改 HEAD 指针的操作(如 git checkout 或 git merge)可能需要下载缺失的 blob 以完成其操作。
在最坏的情况下,计算 blob 差异的命令(如 git blame)会变得非常慢,因为它们在 Git 命令需要时通过单个 blob 请求下载缺失的 blob。这导致多个下载请求,并且 Git 服务器无法在这些对象之间提供增量压缩。
git backfill 命令为用户提供了一种请求 Git 下载缺失 blob(带有可选过滤器)的方式,以便可以批量下载表示文件历史版本的缺失 blob。backfill 命令尝试通过将出现在相同路径的 blob 分组来优化请求,希望服务器发送的包文件中能获得良好的增量压缩。
通过这种方式,git backfill 提供了一种将大型克隆分解为较小块的机制。从使用 git clone --filter=blob:none 的无 blob 部分克隆开始,然后在本地存储库中运行 git backfill,提供了一种通过比克隆时下载整个存储库更少的网络调用来下载所有可访问对象的方式。
默认情况下,git backfill 下载从 HEAD 提交可访问的所有 blob。可以使用下面的各种选项来限制或扩展此集合。
此命令是实验性的。其行为将来可能会改变。
选项
--min-batch-size=<n>
指定从服务器请求的缺失对象批次的最小大小。此大小可能会被在给定路径看到的最后一组 blob 超过。默认最小批次大小为 50,000。
--sparse, --no-sparse
仅在对象出现在与当前稀疏检出匹配的路径时才下载对象。如果启用了稀疏检出功能,则假定 --sparse 并且可以使用 --no-sparse 禁用。
--include-edges, --no-include-edges
在 backfill 中包含边界提交的 blob。在准备 git log -p A..B 或 git replay --onto TARGET A..B 等命令时很有用,其中 A..B 通常排除 A 但你也需要来自 A 的 blob。--include-edges 是默认值。
<revision-range>
仅 backfill 从指定修订范围内的提交可访问的 blob。当未指定 <revision-range> 时,默认为 HEAD(即导致当前提交的整个历史)。有关指定 <revision-range> 的完整方式列表,请参阅 gitrevisions(7) 中的"指定范围"部分。 你还可以使用 git-rev-list(1) 理解的提交限制选项,如 --first-parent、--since 或 pathspec。
另请参阅
Git
git(1) 套件的一部分
