用途
port-features 用于把一个已有仓库中的功能移植到另一个项目中。它的出发点是:上游代码本身就是规格说明。代码中的每一个守卫条件、执行顺序、超时设置和看似奇怪的分支,都可能是别人已经修复过的 bug。如果仅凭自己对功能的理解重写一遍,那些没注意到的修复就会丢失。
主要能力
- 从代码出发获取上游功能的真实实现,而不是依赖截图、摘要或抓取的片段。
- 通过追踪导入和调用者,确定构成该功能的文件集合。
- 阅读路径范围内的 git 历史(包括重命名),了解那些看似多余的代码为何存在。
- 将确切文件连同测试一起复制到目标位置,再按目标需要删减并调整导入与宿主绑定。
- 将移植结果与固定源进行差异对比,为每一处改动给出理由。
- 当移植过来的测试失败时,优先修复适配层,而不是改动算法或测试。
使用方式
- 获取上游的本地检出,保留其历史,并固定到确切的提交。
- 阅读该功能涉及的真实文件,追踪导入和调用者,弄清哪些文件属于该功能。
- 阅读这些文件的路径范围 git 日志(跟随重命名),并阅读其中的修复记录。在改动或删除任何看似不必要的内容之前,先从历史中查明它为何存在。
- 将确切的文件连同测试复制到目标位置。然后删除目标不需要的部分,并修改导入和宿主绑定。即使自己会写得不同,也保留上游的结构和算法,绝不用自己的版本替代。
- 将结果与固定源进行差异对比,为每一处改动给出理由。当移植过来的测试失败时,先修复适配层,再考虑算法或测试。
- 完成的标准是:目标代码等于固定上游代码加上一份可解释的差异,并且交接中注明上游提交和每一处有意差异。
适用场景
- 需要把某个功能从一个仓库迁移到另一个仓库,且希望保留其 bug 修复和行为细节。
- 上游代码包含大量历史修复,重写容易遗漏这些细节。
- 需要明确记录移植来源和差异,便于后续维护和审计。
限制
- 该技能强调“复制后编辑”,不适用于从零重写或仅凭理解重新实现功能的场景。
- 需要能够获取上游的本地检出和 git 历史;如果无法访问历史,则无法执行“阅读历史”这一关键步骤。
- 该技能明确要求:绝不把重写称为移植。
- 关于该技能的具体安装命令、支持的平台、收费方式等信息,资料中暂未提供。