设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
-
2.55.0
2026-06-29
-
2.54.0
2026-04-20
- 2.53.0 无变更
-
2.52.0
2025-11-17
- 2.49.1 → 2.51.2 无更改
-
2.49.0
2025-03-14
描述
无数据块(Blobless)的部分克隆是通过 git clone --filter=blob:none 创建的,并随后配置本地仓库,使得 Git 客户端除非在本地操作需要时,否则会避免下载数据块(blob)对象。最初这意味着克隆和后续的获取操作仅下载可达的提交(commits)和目录树(trees),而不下载数据块。后续改变 HEAD 指针的操作,例如 git checkout 或 git merge,可能需要下载缺失的数据块以完成其操作。
在最坏的情况下,计算数据块差异的命令(如 git blame)会变得非常缓慢,因为它们会在 Git 命令需要时,通过单数据块请求来获取缺失的数据块。这会导致多次下载请求,且 Git 服务器无法跨这些对象提供增量压缩。
git backfill 命令为用户提供了一种方式来请求 Git 下载缺失的数据块(带有可选过滤器),以便批量下载代表文件历史版本的数据块。该 backfill 命令通过对出现在同一路径下的数据块进行分组来优化请求,有望使服务器发送的包文件(packfile)获得良好的增量压缩效果。
通过这种方式,git backfill 提供了一种将大型克隆拆分为较小块的机制。从使用 git clone --filter=blob:none 的无数据块部分克隆开始,然后在本地仓库运行 git backfill,这提供了一种通过多次较小的网络调用来下载所有可达对象的方法,而不是在克隆时下载整个仓库。
默认情况下,git backfill 会下载从 HEAD 提交可达的所有数据块。可以使用下方的各种选项来限制或扩展此集合。
此命令处于实验阶段。其行为在未来可能会发生变化。
选项
--min-batch-size=<n>-
指定向服务器请求缺失对象批次的最小大小。给定路径下看到的最后一组数据块可能会超过此大小。默认的最小批次大小为 50,000。
--sparse--no-sparse-
仅在对象出现的路径与当前稀疏检出(sparse-checkout)匹配时才下载它们。如果启用了稀疏检出功能,则默认假定为
--sparse,并可通过--no-sparse禁用。 --include-edges--no-include-edges-
在回填(backfill)中包含边界提交的数据块。这在为
gitlog-pA..B或gitreplay--ontoTARGETA..B等命令做准备时很有用,因为 A..B 通常排除 A,但你可能同时也需要来自 A 的数据块。--include-edges是默认选项。 - <revision-range>
-
仅回填指定修订范围(revision range)内提交可达的数据块。当未指定 <revision-range> 时,默认为
HEAD(即通向当前提交的整个历史记录)。有关 <revision-range> 表示方法的完整列表,请参阅 gitrevisions[7] 的“指定范围”部分。你还可以使用 git-rev-list[1] 所支持的提交限制选项,例如
--first-parent、--since或路径规格(pathspecs)。大多数
--filter=<spec> 选项不适用于gitbackfill的目的,但sparse:<oid> 过滤器已集成,可提供一组集中的路径进行下载,这与--sparse选项不同。