SVN解决冲突

SVN冲突出现场景

现在是一个团结协做的时代,开发一个系统,每每会多人协做共同完成。版本管理是必不可少的,经常使用的软件有Git,SVN等。今天说一下,SVN管理版本时,若是出现冲突后,如何快速解决冲突。git

首先说明一个问题,有一种状况不管如何都不会出现冲突。假若有一个叫qaz的程序员,他checkout了版本库,这样他拥有了一个工做副本。而后,他修改了某个文件IMRoot.cscommit到SVN,而且这个文件保证不会有其余人在他们的工做副本修改并提交到SVN。这种状况下,不管qaz 如何修改IMRoot.cs ,在commit时都不会发生冲突。程序员

以上说了一种不会出现冲突的状况,那么什么应用场合可能会出现冲突呢?假如程序员wsx 他会修改文件 IMRoot.cs 并commit 到SVN,此时可能会引起冲突。svn

实例分析

下面,咱们根据实际应用场合,模拟出现冲突,到如何经过SVN提供的Edit Conflicts 界面,经过颜色标识和操做按钮,快速准确地合并解决冲突。this

开始,IMRoot.cs 文件主题内容是这样的,命名空间为了理解方便省略掉。 .net


这里写图片描述

 

qaz 在文件的第14 行作了修改,其余的未做任何改动,而且将修改commit到了SVN。 code


这里写图片描述

 

wsx 在在第19行作了修改,修改以下, 图片


这里写图片描述

 

而且在提交前update了(注意由于这个文件已经被qaz 作了修改,因此wsx 若是commit前不update,SVN是不容许提交的),而后commit,此时,SVN不会引起冲突,由于修改不是在同一行。SVN将qaz 的修改合并到了wsx 拥有的工做副本中,合并后文件以下所示, 开发


这里写图片描述

 

为了故意引起冲突,假设qaz 和 wsx 同时都修改了第29行。前者修改第29行为以下,而且commite 到了SVN中 get


这里写图片描述

 

后者修改也同时修改了这一行,这意味他并无update 这个文件, it


这里写图片描述

 

而后他commit 到SVN时,提示先update ,紧接着出现冲突,以下所示, 


这里写图片描述

 

此时,找到这个文件,右键选择Edit conflicts 按钮,弹出编辑冲突的界面,这才到了重点! 


这里写图片描述

 

从上图能够看到,主要有3个子窗口组成,左上Theirs 为SVN版本库中(也就是qaz 刚才修改提交到SVN的版本),右上 Mine 为 wsx (正在提交到SVN发现冲突的他)的工做副本文件,下方为合并他俩的文件后的显示窗口。

如下为这3个窗口的局部视图,依次为左上,右上,下方, 


这里写图片描述 
左上

 

 


这里写图片描述 
右上

 

 


这里写图片描述
下方

 

当面对以上3个窗口时,仍是容易让人发蒙,尤为是文件比较复杂,冲突一大片,各类颜色掺杂在一块儿,不知如何下手,惧怕把其余文件意外破坏和文件合并错误。那么怎么办呢?咱们不妨先从简单的文件冲突入手,完全理解各类颜色的含义,冲突行是如何标记的,这样咱们才敢大胆地使用这个界面进行代码合并操做,不用担忧合并后,把别的文件无辜干扰了或者出现合并错误的问题。

仔细观察以上3个窗口,咱们发现,28行和29行之间多出来一行,即橙色行,而且Theirs 和Mine 都含有这一行,这个是未冲突前,此行的内容,即刚开始的版本。第29行是爆红行、冲突行,相应字段仍是黄色警示,而且在第3个窗口(下方窗口)第29行全是?????这种符号,意味着没法合并他俩对此行的同时修改,须要咱们判断,要么采起Theirs 的,要么采起Mine 的,要么采起上一版本,要么从新商量一个相同的。SVN也提供了几个方便的右键按钮,提示如何作出这些选择, 


这里写图片描述

 

use this text block : 选取选中行的内容 
use this whole file :选取选中行所在文件的所有内容 
use text block from mine before theirs :先用Mine的内容,后面接着用theirs的

假如第29行咱们想采用qaz 的修改,那么,咱们在左上窗口,选中第29行,右键选择 use this text block ,而后下方的视图变为以下, 


这里写图片描述

 

第29行由一行??????变为左上窗口第29行的内容,颜色由爆红变为了浅绿色。这时候注意观察,在上一行橙色显示内容表明什么意思,注意最左侧有个 “-”提示,表明此行不会归入合并文件中。

假如第29 行,咱们都想归入qaz 和wsx 的修改,此时咱们在左上窗口选择,use text block from mine before theirs ,即先用Mine的内容,后面接着用theirs的,选择后下方窗口合并内容以下, 


这里写图片描述

 

能够看到,第29行,先显示Mine的,而后显示Theirs的。

这些操做后,咱们点击上方的Mark as Resolved 按钮,而后保存便可。这样冲突就被解决掉了。而后wsx 再commit 本身的内容到SVN。

冲突深度详细解决方案及可能带来的隐患思考