现在是一个团结协做的时代,开发一个系统,每每会多人协做共同完成。版本管理是必不可少的,经常使用的软件有Git,SVN等。今天说一下,SVN管理版本时,若是出现冲突后,如何快速解决冲突。git
首先说明一个问题,有一种状况不管如何都不会出现冲突。假若有一个叫qaz
的程序员,他checkout
了版本库,这样他拥有了一个工做副本。而后,他修改了某个文件IMRoot.cs
,commit
到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。