做 Claude Code 旧代码迁移,先在隔离副本里盘点代码并保存构建、测试基线,再拆成小批改动逐项验收;不要把模型生成的代码直接当作可上线成果。只有项目确实依赖 macOS 专属构建、签名或测试时,才把 macOS 开发机或云端 Mac 纳入方案。
本周建议动作:先选一个低风险、边界清楚的模块,记录当前输入输出和运行方式;基线不明时先补人工验收条件,不要先启动全仓重写。
适合谁:维护遗留系统的开发者,可用本文梳理依赖与测试缺口。
项目技术负责人,可用这些关卡限定范围、验收人与回退责任。
承接现代化项目的团队,可把流程沉淀成后续可复用的检查项。
最后更新于 2026 年 9 月 24 日;命令与产品信息核对自 Claude Code 官方安装、CLI、安全文档,以及 Anthropic 活动页和代码现代化资料。
动手前:先保存旧行为,再启动迁移
遗留代码现代化最容易被低估的,不只是理解代码本身。构建脚本可能依赖已停用的包源;生产数据格式可能藏着未写入文档的约定;旧测试也可能只覆盖“正常路径”。如果这些条件没有记录,迁移后即使程序成功构建,也无法说明它仍按原业务规则运行。
先建一份边界清单,至少写清:
- 目标范围:哪个模块、服务、批处理任务或接口会被改;明确本轮不碰什么。
- 启动与构建:入口命令、运行时版本、系统库、环境变量、配置文件来源和外部服务依赖。
- 旧行为样本:挑选正常、边界和异常输入,记录关键输出、错误码、副作用或数据变化。
- 现有质量门槛:保存构建、单元测试、集成测试和静态检查结果;失败也要记原因,不能把旧有失败误判成新回归。
- 缺失的验证:如果没有测试,就由熟悉业务的人写出人工检查条件,并标记谁负责确认。
Claude Code 开始改之前,仓库需要准备什么?至少要有可恢复的代码副本、明确的迁移边界、可复现的构建方式,以及一份旧行为基线。缺少自动化测试时,先补输入输出样例和人工验收人;不能用“Claude Code 能生成代码”替代正确性证据。
隔离副本不等于简单复制一个文件夹。你可以用新分支,或用 Git worktree 建立独立工作目录。例如:
git worktree add -b migration/pilot ../project-migration
cd ../project-migration
Git 的 worktree 可以让同一仓库同时使用不同工作目录,适合把试点改动与日常开发分开;它不是备份,因此仍要确认改动已提交或另有可恢复副本。Git worktree 官方手册
首轮分析:先让 Claude Code 解释,再决定改什么
首次运行时,不要马上下“重写整个模块”的指令。先让 Claude Code 梳理入口、调用链、数据结构、外部依赖和测试位置,并要求它把结论分成“代码中能证实”“从命名推测”“需要业务人员确认”三类。这样可以减少模型把猜测补成业务事实的风险。
如果要补项目说明,可维护 CLAUDE.md,只写团队确认过的构建命令、编码约定、目录结构和不能违反的业务约束。官方文档说明,这类项目说明会在会话中提供给 Claude;它是上下文指导,不是强制的安全边界,因此关键检查仍应在测试、权限和人工审查中落实。Claude Code 项目记忆文档
建议按“只读调查—计划评审—小范围修改”推进。你可以先启动计划模式:
claude --permission-mode plan
提示它先列出要查看的文件、推断依据、尚未确认的问题,以及建议的检查命令;等你确认范围后,再切换到允许编辑的工作阶段。Claude Code 的 CLI 文档列出了 plan 权限模式,也说明权限选项会影响会话如何处理操作请求。Claude Code CLI 参考
活动页在 2026 年 9 月 24 日介绍了代码现代化演示,包含 COBOL 到 Java 的迁移,以及约 50 万行 Java 8 到 Java 17 升级的演示案例。这是官方活动页面描述的演示范围,不是所有仓库都能自动迁移的保证,也不能据此推断成功率、工时或验收结果。Anthropic 活动页;Anthropic《代码现代化手册》
分批实施:每个改动都要有边界与回退点
一次只处理一个能独立检查的任务,例如升级某个依赖、转换一个数据结构,或迁移一条边界清楚的调用路径。不要把“修测试、换框架、改接口、清理目录”合成一个大任务;混在一起后,测试失败很难定位原因,人工审查也更容易漏掉行为变化。
每批开始前,让 Claude Code复述:本次允许修改哪些文件、必须保持哪些行为、哪些文件不得改。每批完成后,要求它列出改动文件、接口和数据格式变化、运行过的检查及未解决的问题。你再通过代码差异审查确认回答与实际改动一致。
能不能直接在主分支上改?不建议。遗留迁移通常有未知依赖、旧测试缺口和不确定的业务规则;主分支会把试验性改动与日常交付混在一起。用隔离工作树或独立分支试点,只有在代码审查、回归检查和负责人批准完成后,才合并到主干。
操作权限也需要收窄。把访问范围限定在试点目录,对删除文件、改配置、执行数据库迁移、访问网络或调用外部服务的操作单独审批。Claude Code 官方安全文档提醒,最终仍由用户负责检查建议的代码与命令;遇到敏感仓库时,不能因为工具有权限提示就跳过审查。Claude Code 安全文档
环境选择:目标平台决定要不要 Mac
不要因为使用 Claude Code 就默认租 Mac。Claude Code 的安装文档列出 macOS、Linux 及 Windows 等安装路径;开发环境应由项目的构建目标、系统库、签名流程和测试要求决定。Claude Code 官方安装文档
| 选项 | 适合的项目条件 | 主要代价或限制 | 决策 |
|---|---|---|---|
| Linux 或 Windows 开发环境 | 构建、测试和运行目标均支持当前平台,没有 macOS 专属步骤 | 仍要对齐目标系统的运行时、依赖和配置 | 在该环境完成试点与回归 |
| 本地 Mac | 团队日常开发依赖 macOS,或需长期使用本地设备与接口 | 需要维护本地工具链、系统版本和签名凭据 | 长期、频繁使用时考虑自购 |
| 云端 Mac | 需要短期验证 macOS 构建、签名或测试,且本地没有目标环境 | 先核实可用系统版本、权限、凭据管理和连接方式 | 适合临时验收;先确认服务能力 |
哪些情况下迁移必须放到 macOS 环境?如果项目要执行 Xcode 构建、验证 macOS 应用签名,或测试行为依赖 macOS 系统组件,就应在匹配目标系统的 Mac 环境完成对应步骤。Apple 的分发签名说明区分了使用 Xcode 的应用与外部构建系统:前者通过 Xcode 导出签名版本,后者可能需要把签名步骤纳入自己的构建流程。Apple:为 macOS 创建分发签名代码
反过来,如果应用和工具链能在 Linux 或 Windows 目标环境完整构建、测试,Mac 并不会自动提高迁移正确性。跨平台项目应优先在与生产环境相符的系统上运行回归;macOS 只承担它确实专属的验证任务。
验收与上线:测试通过,还要核对行为差异
代码迁移验收不能只看“构建成功”。至少要比较关键输入输出、边界条件、错误处理、数据格式、接口契约和副作用。对数据库写入、时间处理、金额精度、字符编码及权限判断等高风险逻辑,应安排熟悉业务的人复核,而不是只依赖生成的测试。
推荐按这个顺序做:
- 运行原有检查:在新代码上执行与基线相同的构建、单元测试、集成测试和静态检查。
- 比较关键样例:用相同输入运行旧版与新版,对比输出、错误、日志和数据副作用。
- 补齐边界用例:覆盖空值、极值、重复请求、异常依赖或历史数据;由业务负责人确认样例是否代表真实规则。
- 审查依赖和权限:检查依赖升级、配置变化、外部请求、凭据处理和敏感数据访问。
- 记录未覆盖项:列出缺少的测试、尚未验证的行为、迁移残留、责任人和回退方式。
- 通过后分阶段合并:先由代码审查人和项目负责人确认,再进入下一模块或部署阶段。
怎样判断 AI 修改没有改变旧系统行为?把相同的代表性输入交给旧版与新版执行,核对关键输出和业务不变量;再审查异常路径、数据副作用与接口兼容性。如果原系统无法运行,就明确哪些结论只能靠人工核验,并把风险留在验收记录中。通过测试只表示已覆盖部分检查,不代表未覆盖路径也必然等价。
上线后:保留证据,不照搬一次性输出
上线不是迁移工作的结束。保留提交记录、测试报告、人工审批、环境信息和回滚步骤;监控新旧行为差异、错误率与业务异常。生产中出现此前没覆盖的输入时,把它补成可复现用例,再决定是否修复或回滚。
后续任务可以复用已经验证过的检查项,但不要直接照搬某次模型输出或某份迁移计划。旧系统通常有自己的隐式规则;任何新模块都应重新确认输入边界、业务负责人和目标平台。
时效核对:截至 2026 年 9 月 24 日,官方活动页介绍了现代化演示与代码现代化插件,但实际安装步骤和插件可用状态应以活动资料及 Claude Code 官方文档为准。本文给出的是风险控制流程,不承诺自动迁移成功率或性能。
如果你的流程目前依赖临时手工复制、在不匹配的系统上试构建,或把签名凭据留在个人设备上,短期交付可能更难复现;但如果项目不需要 macOS 专属步骤,租 Mac 也不是必要开销。只有在确认目标系统、签名和测试要求后,才值得比较临时 Mac 环境与自购设备:短期验收可优先核对是否能租到符合目标版本的环境,长期高频构建则应评估自有 Mac。你可以在 Hashvps 套餐详情核对当前资源信息,并通过 Hashvps 帮助中心确认是否支持你的目标环境;确认可用后,再判断租赁是否比额外维护一套本地环境更合适。
给遗留代码迁移准备一台专用云端 Mac
用 Hashvps 的原生 macOS 环境搭建隔离副本,记录旧行为、分批修改并逐项回归。
通过 SSH 或 VNC 远程操作,让构建、调试和验收都在同一台 Mac 上完成。