首页/开发/Git 与协作速查/promisor 远端与按需对象补齐
进阶与大仓实践69 条

promisor 远端与按需对象补齐

部分克隆会把远端登记为 promisor(承诺可补齐对象);缺对象时 Git 自动从那拉取,理解它才能解释离线报错与补齐行为。

Git 与协作速查开发更新于 2026-10-13

promisor 远端是什么

promisor 远端是部分克隆的「对象补货站」:克隆时把某个远端登记为 promisor(承诺可补齐缺失对象),此后本地缺对象时 Git 会自动向它请求。理解这层关系才能解释两类现象:联网时命令无感、断网就报缺对象;远端被换掉后一片报错。排查「同事机器正常、你的机器缺对象」时,第一步就是对比 promisor 配置。

基本信息

查看git config --get-regexp 'remote\..*\.(promisor|partialclonefilter)'
补齐方式读取缺对象时自动 fetch,无需手工命令
验证存在git cat-file -e <对象>,缺失时退出码非零
离线表现缺对象且网络不可用时命令直接失败
关联配置remote.<name>.promisor 与 partialclonefilter
断链场景远端改名、删除或迁移后补货链失效

典型使用场景

  • 排错缺对象:同事正常你报错时,先比对 promisor 配置与本地缓存
  • 仓库迁移:换远端后确认 promisor 指向已更新,按需拉取不断链
  • 离线准备:出发前实际读取所需路径触发下载,断网后才有内容可用
  • CI 优化:缓存对象与配置一起保存,减少任务里的按需拉取等待
  • 团队科普:解释「历史完整、内容不全」的机制来源
  • 安全盘点:梳理哪些远端被登记为 promisor,评估数据流向

常用示例

常用示例
git config --get-regexp 'promisor|partialclonefilter'   # 列出 promisor 与过滤配置
git config --get remote.origin.promisor                 # 确认单一远端是否登记
git cat-file -e HEAD:src/app.js && echo 对象已就绪      # 验证某对象本地是否存在
git fetch --refetch --filter=blob:none                  # 过滤策略变更后重新取数(仍按过滤器执行)

配置与行为

配置/动作作用备注
remote.<n>.promisor登记补货远端缺对象时自动向它请求
partialclonefilter记录过滤器后续 fetch 默认沿用
cat-file -e检查对象是否具备缺失时报错,退出码非零
fetch --refetch重新取数按过滤器执行,不会补全被过滤对象
排查「同一命令在同事机器正常、你的机器报缺对象」时,先对比 promisor 配置与本地对象缓存。
promisor 与过滤器是仓库级配置:远端改名或删除后补货链断裂,迁移时要把这几项一起更新。
别把 refetch 当补全手段:它按过滤器执行,缺的内容不会因此回来;预取就实际读取需要的路径触发下载。

易错点

  • 误删 promisor 远端:仓库无法补对象,需重新配置或重新克隆
  • 对象缓存被误扫:CI 缓存键要包含仓库标识,避免拿错缓存放大缺对象问题
  • 以为断网无碍:缺对象时离线命令直接失败,外出前先预取
  • 迁移漏改配置:promisor 指向旧地址,所有按需拉取失败
  • 混淆能补与已全:promisor 只保证可补齐,不保证本地完整,别据此判断数据是否齐全

数据来源与参考

  • Git 官方文档:git-config(remote.<name>.promisor)
  • Git 官方文档:git-fetch(--refetch)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌