1. 创建分支
命令:svn cope(cp)
请务必基于主干创建分支
$svn cp http://svn.alibaba-inc.com/repos/crm/zeus/trunk http://svn.alibaba-inc.com/repos/crm/zeus/tags/20070928_r_release/
2. 分支合并到主干,保证工作拷贝是主干版本
命令:svn info
$svn info | grep URL
3. 检查需要合并的分支的历史,取分支创建时的版本
命令:svn log --stop-on-copy -q URL
$svn log --stop-on-copy -q http://svn.alibaba-inc.com/repos/crm/zeus/tags/20070928_r_release/
------------------------------------------------------------------------
r16206 | huangcong | 2007-09-28 16:31:27 +0800 (Fri, 28 Sep 2007)
------------------------------------------------------------------------
r16205 | huangcong | 2007-09-28 16:30:55 +0800 (Fri, 28 Sep 2007)
------------------------------------------------------------------------
r16180 | bing.yanb | 2007-09-28 09:38:08 +0800 (Fri, 28 Sep 2007)
------------------------------------------------------------------------
r16179 | bing.yanb | 2007-09-28 09:37:57 +0800 (Fri, 28 Sep 2007)
------------------------------------------------------------------------
r16178 | shifeng.wangsf | 2007-09-28 09:26:21 +0800 (Fri, 28 Sep 2007)
------------------------------------------------------------------------
r16176 | shifeng.wangsf | 2007-09-28 09:14:16 +0800 (Fri, 28 Sep 2007)
------------------------------------------------------------------------
r16174 | jessica.zhangj | 2007-09-28 09:04:19 +0800 (Fri, 28 Sep 2007)
------------------------------------------------------------------------
4. 选取创建分支时的版本开始合并,起始选取16174,结束版本选最新HEAD
命令:svn merge
$svn merge -r 16174:HEAD http://svn.alibaba-inc.com/repos/crm/zeus/tags/20070928_r_release/ .
5. merge后的状态检查
命令:svn st
当出现C的状态时,就表明你的文件有冲突了,而你需要做的就是:沟通交流,手工解决!执行svn revert FILE_NAME!
使用merge时,合并的起始版本一般选取stop-on-copy的版本,即创建分支时的版本。请避免分支名变更或分支地址移动之类的操作,避免合并不完全! |
如果发现merge时提示Skipped
可能性及解决方案:
- 本地工作拷贝的某些需要合并的文件被删除
解决:svn up 将删除的文件更新回到工作拷贝 - 需要新增文件在工作拷贝中已经存在同名文件,但未纳入版本库
解决:svn st | grep ? | xargs -s 100000 rm -rf - 其他
请使用svn revert -R 将工作拷贝恢复到未修改的状态,再进行merge。***********************************************************
在合并之前使用svn st查看一下工作拷贝的状态,是比较严谨的作法!
***********************************************************
a、 本地工作拷贝的某些需要合并的文件被删除 $ svn st ! map $ svn merge -r 16174:HEAD http://svn.alibaba-inc.com/repos/crm/zeus/tags/20070928_r_release/java/com/ali/zeus/bzo Skipped missing target: 'map/AliZeusLeadsFilterkeyMapBuilder.java' Skipped missing target: 'map/AliZeusLinkmanLogMapBuilder.java' Skipped missing target: 'map/AliZeusLeadsLogMapBuilder.java' Skipped missing target: 'map/AliZeusBlacklistMapBuilder.java' Skipped missing target: 'map/AliZeusLeadsAppendMapBuilder.java' Skipped missing target: 'map' b、 需要新增文件在工作拷贝中已经存在同名文件 $ svn st ? BaseAliZeusBlacklist.java ? AliZeusLeadsFilterkeyPeer.java ? AliZeusBlacklistPeer.java ? AliZeusBlacklist.java $ svn merge -r 16174:HEAD http://svn.alibaba-inc.com/repos/crm/zeus/tags/20070928_r_release/java/com/ali/zeus/bzo Skipped 'BaseAliZeusBlacklist.java' Skipped 'AliZeusLeadsFilterkeyPeer.java' Skipped 'AliZeusBlacklistPeer.java' Skipped 'AliZeusBlacklist.java'