SVN如何将同一功能分支先后合并至staging分支与trunk分支
适配单测试服务器并行测试的SVN分支操作方案
方案可行性说明
你设计的分支逻辑完全适配你们的需求:将trunk作为生产基准分支、staging作为永久独立的测试集成分支,所有feature分支从staging拉取,开发完成后合并到staging部署测试,单个功能测试通过后即可单独合并到trunk上线,无需等待其他测试中功能,该流程本身是可落地的。
测试冲突的原因
你遇到的合入冲突是SVN默认全量合并的逻辑导致的:直接全量合并feature分支到trunk时,SVN会把feature分支从创建到提交的所有历史变更都带入,包括staging分支独有的(trunk不存在的)内容,比如你测试案例里staging新增的第二行内容,就会和trunk的现有内容判定为冲突。
正确操作步骤
标准合并流程
- 功能开发完成后合并到staging:
- 本地切换到staging工作副本,拉取最新代码
- 执行命令
svn merge ^/branches/你的feature分支名,图形化工具可直接选择合并对应feature分支的所有未合并版本 - 解决冲突后提交staging,部署测试环境验证
- 测试通过后合并到trunk:
核心操作:仅合并该feature分支上的功能开发提交,不要全量合并分支- 先执行
svn log ^/branches/你的feature分支名,查询该功能开发对应的所有提交版本号,比如r205、r206 - 本地切换到trunk工作副本,拉取最新生产代码
- 执行命令
svn merge -c 205,206 ^/branches/你的feature分支名,图形化工具合并时手动勾选上述功能开发对应的版本,不要选继承自staging的历史版本 - 验证代码正确性后提交trunk,部署生产
- 先执行
现有测试冲突解决方法
你当前测试场景中,feature分支仅做了新增第三行的提交,假设该提交的版本号为r5,直接在trunk工作副本执行svn merge -c 5 ^/branches/feature1即可仅合并第三行的变更,不会带入staging的第二行内容,不会产生冲突。
如果已经触发冲突,可手动编辑冲突文件,删除重复的冗余行,仅保留trunk原有内容和feature新增的功能代码,保存后执行svn resolve --accept working 冲突文件名标记冲突解决,再提交即可。
长期优化建议
- 单个feature分支只做对应功能的开发,提交粒度清晰,避免掺杂无关变更
- 每次合并到trunk前必须拉取最新的trunk代码,避免和已上线的其他功能冲突
- 定期将trunk的最新生产代码合并到staging分支,降低两个分支的差异度,减少后续合并冲突概率,同步操作建议选在无功能在测的窗口执行
内容的提问来源于stack exchange,提问作者Aaron S
相关产品推荐
相关产品推荐

