本地无提交将一分支工作副本合并至另一分支,求SVN三路合并命令
SVN三路合并WC_A到WC_B的正确操作
嘿,完全懂你长期泡Perforce,突然碰SVN会有点手生的感觉~针对你说的场景,我给你理清楚该怎么操作:
先再确认下你的场景:
- WC_A是基于Branch_A(从trunk_revx分出来的)的工作副本,里面有你做的变更
- WC_B是新检出的Branch_B(从trunk_revy分出来的)的工作副本,是你要合并的目标
分两种情况处理:
情况1:WC_A的变更已经提交到Branch_A仓库
这种情况需要明确共同祖先版本(也就是Branch_A和Branch_B最初分叉的那个基线,比如trunk_revx的版本号,记为REV_COMMON):
- 先拿到WC_A对应的Branch_A的最新版本号:
切换到WC_A目录,执行:
记下这个版本号,比如svn info | grep RevisionREV_A。 - 切换到WC_B的根目录,执行三路合并命令:
用仓库URL的方式(更稳妥,避免本地路径问题):
或者用本地WC_A的路径:svn merge ^/Branch_A@REV_COMMON ^/Branch_A@REV_A .
这里的svn merge ../WC_A@REV_COMMON ../WC_A@REV_A ..代表当前WC_B目录,命令会以REV_COMMON为基准,把Branch_A从REV_COMMON到REV_A的所有变更合并到WC_B里。
情况2:WC_A的变更还没提交到仓库(仅本地修改)
这种情况更简单,直接在WC_B的根目录执行:
svn merge ../WC_A .
SVN会自动识别WC_A(Branch_A)和WC_B(Branch_B)的共同祖先,自动完成三路合并,不需要手动指定版本号。
合并后的后续操作
- 执行
svn status查看是否有冲突文件 - 如果有冲突,手动编辑冲突文件解决矛盾,然后执行
svn resolved <冲突文件名>标记冲突已解决 - 最后提交合并结果:
svn commit -m "合并WC_A的变更到Branch_B"
内容的提问来源于stack exchange,提问作者Johann Studanski
相关产品推荐
相关产品推荐

