跨机迁移说明

August 22, 2026 · View on GitHub

场景:在 A 电脑导出快照 ZIP → 拷到 B 电脑导入 → 在 B 上回滚到某个快照。 English: migration.en.md


一、会发生什么

1. 配置文件:正常恢复

快照里的 6 类配置文件(cordis.patch.yml / package.json / settings.yaml 等)会原样写回 B 的对应位置。

2. 插件代码文件:不会被塞进 B(v0.2.0 起)

快照包含插件代码树(blob 引用),但恢复时有一道硬校验(liveDirs 检查):

  • B 没装那个插件 → 整个插件条目跳过,零写入,恢复报告列出「directory no longer present」;
  • B 装了同名插件 → 插件代码会被覆盖成 A 快照时的版本(恢复 = 把 B 变成 A 当时的状态,请知悉)。

3. blob 残留:只占空间,不写文件

导出/导入会把 A 的插件代码 blob 一起带过去(为保证恢复可用而设计)。导入后只占磁盘空间,不会被自动写回任何文件

4. 真正的坑:patch 引用了 B 没有的插件 → 启动报错

快照里的 cordis.patch.yml 会原样恢复。如果它挂载了 A 的插件而 B 没装 → DSH 启动时 loader 加载失败(MODULE_NOT_FOUND)。

跨机恢复的本质 = 把 B 的配置变成 A 的样子,B 必须装齐 A 的插件才能正常启动。 这不是插件代码树功能引入的新问题,恢复配置本来就会这样。


二、跨机一致性预检(v0.3.1 起,自动提示)

恢复时自动扫描目标快照引用的插件(patch 挂载条目 + package.json bundles),探测本机能否解析。缺失时恢复报告明确提示:

⚠️ Cross-machine preflight: referenced but NOT resolvable on this machine: dsh-xxx
DSH may fail to start after restore — install them first, or use undo_safe_mode action "on" ...
  • 本地文件条目(name: './xxx')不探测;
  • 多锚点探测(用户 node_modules / profile 依赖树 / 插件位置链),任一可解析即视为已装,避免误报;
  • 预检只提示不阻断;跳过缺失挂载的自动恢复在后续版本提供。

三、最佳实践

步骤操作
1A 上「导出」快照 ZIP
2B 上先装齐 A 的插件dsh plugin --profile web add <插件>),再导入 ZIP
3B 上恢复,注意预检提示
4启动失败?安全模式兜底undo_safe_mode on → DSH 一定能启动 → 再决定装插件或回退