关闭

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

标签: svn冲突合并隐患
1077人阅读 评论(1) 收藏 举报
分类:

在这篇总结 版本管理-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

2
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    Leetcode Solutions in Github

    Click me

    Leetcode solutions in Github, including tags: Array, HashTable, Stack, Queue, LinkedList, Tree, Graph,...

    leetcode-manager

    Click me

    Current Leetcode manager: it's used by Entity Framework, WinForms, Sql Server to manage leetcode questions that we have done. Functions include tags creation, revise and deletion, and questions creation, edit and deletion.

    个人资料
    • 访问:127507次
    • 积分:5059
    • 等级:
    • 排名:第5851名
    • 原创:312篇
    • 转载:0篇
    • 译文:0篇
    • 评论:53条
    博客专栏