你真的会解决代码合并冲突么?

   先来了解下什么是冲突吧。冲突就是代码 String str="aaaa" 被同时修改,一个要变成String str="bbbb";一个要变成String str="cccc";这就在代码合并的时候就带来了冲突。如果代码合并是从主干rebase到分支,如果出现冲突,都是以主干为准(以保证已有的功能不受到影响),就会出现主干代码强制覆盖分支的代码。出现冲突后有4个文件(以pom.xml文件为例):

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、小程序制作、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了志丹免费建站欢迎大家使用!

   1.pom.xml                       ---------合并后的文件,如果有冲突会有<<<<<<<冲突提示符

   2.pom.xml.merge-left.r1298      ---------主干的前一个版本,也就是计算是否有冲突的根文件

   3.pom.xml.merge-分支            ---------本地分支的代码,也就是你要求rebase主干的分支代码

   4.pom.xml.merge-来源.r1313      ---------主干的代码

有些人认为解决冲突只要看1中的pom.xml中的冲突提示符就够了。然后对有冲突的地方一一解决就够了。如下图:

   你真的会解决代码合并冲突么?

   

   实际上只是看这个是远远不够的。有这样的一种情况。String str="aaaa",被同时修改,trunk上已经是String str="bbbb";本地分支又被修改为String str="cccc";另外一个变量 String str2 = "aaaa2";trunk上没有变化,只是本地分支被修改为了String str2="cccc2";这个时候svn会将这个文件视为有冲突,因为str 即想变为bbbb又想变为cccc,会计算为冲突。但是str2从冲突的定义上来看不是一个冲突,因为只有一个地方修改。svn在代码合并的时候,发现这个文件有冲突会直接用trunk的内容覆盖分支的内容,并且将str的地方打上冲突提示符。但是str2的地方就不会打上冲突标识符,因为它不是一个冲突。因此这个文件合并后就是这样的:

   你真的会解决代码合并冲突么?

   如果只是按照冲突提示符去合并就会出现本地代码丢失的场景。那么正确的合并冲突解决方法应该是什么呢?应该是根文件(上面提到的pom.xml.merge-left.r1298),分支文件(pom.xml.merge-分支),trunk文件(pom.xml.merge-来源.r1313)进行三方比较。比较工具我使用的是Beyond Compare 3。如下图所示:

   你真的会解决代码合并冲突么?

你真的会解决代码合并冲突么?

   从上图可以看出,真正出现冲突的是version1会打上冲突提示符,version是直接被trunk的覆盖。合并后的文件如下图:

   你真的会解决代码合并冲突么?

   合并冲突的时候应该对这三个文件进行三方比较,具体操作可以使用上面标红的直接定位。合并的时候一定要清楚那些是需要保留分支的,那些是需要保留主干的。


新闻标题:你真的会解决代码合并冲突么?
文章网址:http://pwwzsj.com/article/jcjegd.html