SVN 树冲突和目录丢失问题(3)
昨天在《SVN 树冲突和目录丢失问题(1)》中重现 yzw遇到的“更新导致树冲突”,实际上可以有更简单的重现方法。
大概的方法是:
- 将主线 trunk 更新到老的版本,该老的版本尚不包含 somedir 的提交
- 然后从 branches/0.x 分支合并到主线
- 提交会引发过时错误
- 执行 svn 更新
- 更新引发树冲突
- 查看当前主线的 log
~/tmp/svntf/trunk$ svn log ------------------------------------------------------------------------ r4 | jiangxin | 2010-04-22 19:51:55 +0800 (四, 2010-04-22) | 1 行 to trunk, we add somedir/trunk.txt file. ------------------------------------------------------------------------ r1 | jiangxin | 2010-04-22 19:48:57 +0800 (四, 2010-04-22) | 1 行 initial ------------------------------------------------------------------------
- 将主线 trunk 更新到老的版本,该老的版本尚不包含 somedir 的提交
~/tmp/svntf/trunk$ svn up -r3 D somedir 更新到版本 3。 ~/tmp/svntf/trunk$ svn log ------------------------------------------------------------------------ r1 | jiangxin | 2010-04-22 19:48:57 +0800 (四, 2010-04-22) | 1 行 initial ------------------------------------------------------------------------ ~/tmp/svntf/trunk$ svn ls ~/tmp/svntf/trunk$
- 然后从 branches/0.x 分支合并到主线
~/tmp/svntf/trunk$ svn merge file:///tmp/svnserver/branches/0.x --- 正在合并 r2,经由 r4,到 “.”: A somedir A somedir/branch.txt
- 查看一下当前状态以及目录的svn属性
~/tmp/svntf/trunk$ svn st M . A + somedir A + somedir/branch.txt ~/tmp/svntf/trunk$ svn pl -v . “.” 上的属性: svn:mergeinfo /branches/0.x:2-4
- 提交会引发过时错误
~/tmp/svntf/trunk$ svn ci -m "从分支 0.x 合并" 正在发送 trunk svn: 提交失败(细节如下): svn: 目录 “/trunk” 已经过时
- 执行 svn 更新,引发树冲突
~/tmp/svntf/trunk$ svn up C somedir 版本 4。 冲突概要: 树冲突:1
- 查看树冲突的状态
~/tmp/svntf/trunk$ svn st M . A + C somedir > 本地 增加,动作 增加,操作 更新 A + somedir/branch.txt
- 采用分支的修改,抛弃本地(主线)的修改 本地还原到 trunk 最新提交 ==> 删除 somedir 目录 ==> 提交 ==> 执行更新以免由于目录属性修改导致过时错误 ==> 将分支 0.x 合并到主线 ==> 合并成功,没有冲突 ==> 提交合并结果到主线
- 采用本地(主线的修改),抛弃分支的修改 还原到 trunk 最新提交 ==> 将分支 0.x 合并到主线 ==> 引发合并导致的树冲突 ==> 用 svn resolve --accept working 标记 somedir 的树冲突已经解决 ==> 提交合并结果到主线