5.6. 解决冲突

有时当你从版本库中更新你的文件时,会有冲突。冲突出现的原因是两个开发人员修改了文件中相同的几行。由于Subversion不知道你的项目的具体情况,它把解决冲突的工作留给了开发人员。一旦出现冲突,你就应该打开有问题的文件,查找以字符串<<<<<<<开头的行。有冲突的区域用如下的方式标记:

<<<<<<< filename
    你的修改
=======
    来自版本库中的代码
>>>>>>> revision

对于每个冲突的文件Subversion在你的目录下放置了三个文件:

filename.ext.mine

这是你的文件,在你更新你的工作复本之前存在于你的的工作复本中——也就是说,没有冲突标志。这个文件除了你的最新修改外没有别的东西。

filename.ext.rOLDREV

这是在你更新你的工作复本之前的基础版本(BASE revision)文件。也就是说,它是在你做最后修改之前所检出的文件。

filename.ext.rNEWREV

这个文件是当你更新你的工作复本时,你的Subversion客户端从服务器接收到的。这个文件对应与版本库中的最新版本。

你可以通过TortoiseSVN编辑冲突运行外部合并工具/冲突编辑器,或者你可以使用任何别的编辑器手动解决冲突。你需要冲定哪些代码是需要的,做一些必要的修改然后保存。

然后,执行命令TortoiseSVN已解决并提交人的修改到版本库。需要注意的是已解决命令并不是真正的解决了冲突,它只是删除了filename.ext.minefilename.ext.r*两个文件,允许你提交修改。

如果你的二进制文件有冲突,Subversion不会试图合并文件。本地文件保持不变(完全是你最后修改时的样子),但你会看到filename.ext.r*文件。如果你要撤消你的修改,保留版本库中的版本,请使用还原(Revert)命令。如果你要保持你的版本覆盖版本库中的版本,使用已解决命令,然后提交你的版本。

你可以右击父文件夹,选择TortoiseSVN已解决...,使用“已解决”命令来解决多个文件。这个操作会出现一个对话框,列出文件夹下所有有冲突的文件,你可以选择将哪些标记成已解决。