版本管理-SVN爆红详细解决方案及可能带来的隐患思考(二)

原创 2017年04月02日 10:24:05

在这篇总结 版本管理-SVN冲突爆红后如何通过颜色和快捷键准确无误地合并代码(一)中,我们讨论了SVN不会引发合并冲突和可能冲突的场合,借助一个简单的文件,一行代码有冲突,阐述了如何通过颜色和快捷键快速解决冲突,合并文件。然而,显示项目和产品开发中,引发的冲突不会这么简单,往往都是一大片爆红,黄色,橙色,灰色,绿色,一下映入眼帘,这个时候,我们如何保证快速且准确无误地完成代码合并,进而完成开发任务,再也不为SVN的冲突头疼呢?

下面借助一个接近项目的复制的冲突例子,详细地解释如何应用SVN可视化解决冲突窗口,快速合并代码。

wsx 在文件IMRoot 中做又做了一些修改,并将这些修改提交到了SVN版本库。而qazwsx 修改的这段时间呢,也对这个文件做了修改,等他修改完成准备提交的时候,冲突出现了,如下图所示,为了更加好理解解决冲突的可视化窗口,给出的颜色提示,我们如何利用它们解决冲突,合并代码。


这里写图片描述
冲突后的3个子视图


这里写图片描述
左上视图(版本库)


这里写图片描述
右上视图(qaz 想要提交的本地工作副本)

利用颜色和右键命令解决冲突

左上视图与qaz 本地工作副本中同一个名称的文件发生了冲突。我们从第8行的下一行开始分析,显示为橙色,并且上方左、右两个窗口都显示相同,它们前面都有个2个小绿条,在下方的合并窗口中看到此行也为相同内容,但是前面是个蓝色的减号。多次实践表明,这表示上一版本中的内容,如果未右键点选此行的话(不明白请看系列一),它是不会合并到最终文件中。

继续向下看便是一片爆红区域,也是所谓的冲突区域,重点关照,左侧(版本库)中第9行~15行,与本地副本(qaz 想提交的)第9行~12行发生冲突,这里有人会问,为什么不是第9行~15行即为什么不是一行一行的比较,可以估计这是SVN的智能比较算法,它会比较上下文,所以导致错行现象,幸好这不是我们考虑的重点。

第9行左右两侧都是一样的,任意选择一行,右键点击use this text block ,第10行内容有区别,假如想要右侧窗口行,那么我们右键选择use this text block ,合并视图(下方窗口)第10行立即变为浅绿色,表示第10行的冲突解决掉了。

继续,我们想要左侧窗口的第11行~14行,此时我们选中这几行,右键也是选择use this text block ,同样下方合并窗口颜色变浅绿色。准备解决第15行,此时我们想要右侧窗口的第12行,即如下这行代码,

public interface IMRoot:IClonable

但是我们刚才那种操作已经舍弃它了,选择了左侧的第12行了啊,这该怎么办呢?哦,原来还有一招,右键菜单还有一个选项use theirs before mine,这样我们在左侧窗口选择第12行,然后点击这个按钮,现在的视图变为以下这样,


这里写图片描述
左侧选择第12行然后点击 use theirs before mine 的效果

此操作后,右侧窗口的第12行自动合并到文件中了,此时下方合并窗口,已经合并到第15行。


这里写图片描述
合并到第15行

在下方的合并窗口中点击下冲突的第16行,对照着左上的第15行,这不是我们想要的,果断选择右方的对应行,合并后视图如下:


这里写图片描述

按照同样的方法,我们继续解决第17行~22行的冲突,全部选择上方的左侧区域行,


这里写图片描述

合并后的视图如下,


这里写图片描述
合并到第22行

这样冲突就都解决完了,以上基本涵盖了项目中遇到冲突后常规的解决办法。是不是这样就完美解决冲突,代码不会有任何问题了? 未必!请看合并后的代码,我们发现,怎么在第22行和32行出现了两个相同字段DateLength呢?这是为什么呢?

SVN无法解决的问题

我们来看下SVN自动如何将两个文件比较然后合并的,上方左侧窗口有个灰色区域,灰色表示与右侧相比缺少代码,并且不冲突,SVN遇到这种情况,会默认将缺少的合并到本地库(qaz)中。我们知道,橙色不会进入合并文件,但是黄色区域会进入合并文件的。如果默认这样的话,我们便找到了合并后出现2个相同的DateLength字段的原因了!

大家注意看,在以上解决冲突时,我们已经将这个字段DateLength合并到第22行了,所以这样合并会发生使这个字段重复定义两次。


这里写图片描述

文件单一负责制,多人尽量小改同一文件

解决这个问题,要么当时合并仔细对照了,要么便是编译代码才能发现,有可能也很难发现的。为了杜绝这种情况,我们尽量同一个人只改同一个文件,如果实在涉及到了多个人修改,我们最好是个别行的冲突,最好杜绝这种一大片的冲突,出现这种情况,往往便是多个人对同一个文件出现了非常大的修改才会导致的。

附录

合并后文件,SVN版本库文件,想要合并到SVN中的文件单独放到附录中:
http://blog.csdn.net/daigualu/article/details/68953332

版权声明:本文为博主原创文章,欢迎转载,请注明 http://blog.csdn.net/daigualu

关于SVN提交不成功问题

服务端让我们提交项目 ,但是提交了半天也提交不上去,最后问了下服务端那边才知道,我们这边提交的时候,需要在自己的SVN上需要1.需要新建问题的选项, 写个名字 2.在问题的选项那里找到自己新建的问题,...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

source insight的查找功能

source insight是一款很好的c语言的程序编辑器,方便对project管理,方便程序的阅读和编辑。查找功能使用十分频繁,选项较多,与其它软件的查找功能也类似,下面对英文版的查找功能,做简单说...
  • kobesdu
  • kobesdu
  • 2014年07月24日 14:53
  • 35802

第十一章全部上机代码

上机练习1 --查询每个年级的总学时数,并按照升序排列。 SELECT SUM(ClassHour) AS 总学时,GradeId AS 年级 FROM Subject GROUP BY Grade...

python调用java编写的Webservice

首先我使用的是java自带的对webservice的支持包来编写的服务端和发布程序,代码如下。 webservice的接口代码: package com.xxx.test.ws; import ja...
  • dmcpxy
  • dmcpxy
  • 2014年03月10日 16:06
  • 4687

linux/ubuntu 端口开放

在ubuntu下面开放端口好像主要有两种方法,一种是ubuntu自带的防火墙,一种是iptables,这里我们主要使用iptables。本文的系统版本为ubuntu14.04和ubuntu16.04 ...

java 判断对象是否是某个类的类型两种方法

一、 instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。  用法: ...

putty连接中断的恢复

第一次连接时使用screen命令对session进行记录: 1、
  • csdidi
  • csdidi
  • 2014年11月04日 19:58
  • 1348

用UGUI做一个鼠标悬停事件

在游戏中经常会有物品属性的查看,这些实现往往都是当鼠标移动到该物体上时弹出一个属性框,简单的做法是做一个UI框,将它的Active设置成false,就是不让它显示,只有当鼠标移动到这个物体上时,才会让...
  • KiTok
  • KiTok
  • 2016年11月04日 10:28
  • 5302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:版本管理-SVN爆红详细解决方案及可能带来的隐患思考(二)
举报原因:
原因补充:

(最多只允许输入30个字)