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 当补全手段:它按过滤器执行,缺的内容不会因此回来;预取就实际读取需要的路径触发下载。