在探索 Subversion 中的功能时,我尝试测试svnbook的分支和合并章节的基本合并部分的撤消更改小节中描述的用例。我使用的是 1.6.4 版本,但该部分的文本在本书的两个版本中是相同的。
在我的工作副本目录中,我编辑了一个文件 testcode.py,每次编辑添加一行,并在每次编辑后提交。几次提交后,文件内容如下:
this is my first import to trunk. r1.
this is my first commit, first edit of testcode.py. r2.
this is another edit of testcode.py. r3.
this is an edit of testcode.py. i'll get rid of this one. r4.
this is another edit of testcode.py. keeping it. r5.
yet another edit. keeping it. r6.
存储库中的修订号与文件中的行匹配,因此在 /trunk/testcode.py@rN 中,文件的最后一行是以 rN 结尾的行。我想要做的是删除以 r4 结尾的行,保持之前和之后的所有其他内容不变。
按照 svnbook 的 Undoing Changes 部分中的示例,我运行命令
svn merge -c -4 file:///path_to_repos/trunk
这会产生冲突(在运行该命令时,而不是在提交时),其中合并左文件包含直到第 r4 行的所有内容,而合并右文件包含直到第 r3 行的所有内容。换句话说,该命令不是删除过去的更改,而是希望将整个文件恢复到修订版 3 或 4,从而删除后续修订版(在本例中为 5 和 6)中的更改。
我在 svnbook 中阅读示例的方式,它让用户撤销在修订版 303 中提交的更改并将结果提交到修订版 350 没有冲突,我运行的命令应该生成一个 svn 状态为 M 的文件,该文件保留所有以 r4 结尾的行除外。
我是否错误地阅读了本书的示例,示例是否错误,或者是否有其他形式的用户错误我没有意识到?