关闭

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

标签: svn冲突合并隐患
2859人阅读 评论(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
查看评论

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

SVN冲突爆红后如何通过颜色和快捷键准确无误地合并代码(一) 和 版本管理-SVN爆红详细解决方案及可能带来的隐患思考(二),代码合并后的文件,SVN文件,想合并到SVN文件作为附录放到这里。
  • daigualu
  • daigualu
  • 2017-04-02 18:24
  • 9453

svn分支管理的使用与经验

最近项目用上了svn分支管理,因为项目太过庞杂,版本迭代也过于频繁,致使多个版本的代码交杂在一起,难以维护,无法保证其中某个版本的稳定性。当然,我们也用过很土的办法,代码复制一份出来,但是,这个副本也需要加上新开发的功能。所以,我们决定使用svn分支管理。文章这里,以简明的步骤总结了svn分支管理的...
  • cwqcwk1
  • cwqcwk1
  • 2016-06-30 22:59
  • 17047

SVN 版本管理:两种开发模式

1. SVN标准目录 Subversion有一个很标准的目录结构,是这样的。比如项目是 proj,svn地址为 svn://proj/,那么标准的 svn 布局是: 这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不...
  • Garfield2005
  • Garfield2005
  • 2016-09-23 15:43
  • 9441

svn代码版本管理总结

介绍svn工具进行版本管理代码,说明trunk, branch, tag,release的用途,使用方法等
  • xiaomu_fireant
  • xiaomu_fireant
  • 2011-02-19 23:07
  • 30356

如何利用SVN的Branches与Tags进行版本的管理

如何利用SVN的Branches与Tags进行版本的管理
  • glodream
  • glodream
  • 2017-04-08 18:06
  • 478

SVN版本管理工具的使用

SVN介绍 SVN服务器与客户端的安装以及使用 Eclipse的svn插件的安装以及使用
  • shuaicihai
  • shuaicihai
  • 2017-01-14 11:46
  • 2394

版本控制:SVN和GIT的一些使用感受

背景: 原本在学校跟随导师做项目的时候,就一直在使用版本管理,主要是用来记录项目的修改,项目成员之间的沟通和交流。使用的服务端是Visual SVN,客户端是TortoiseSVN,常用的TortoiseSVN指令也仅限于SVN Update和SVN Commit,前者用来从服务器更新,以期望查...
  • zssureqh
  • zssureqh
  • 2014-09-07 07:27
  • 57956

SVN搭建本地文件版本管理

SVN是比较优秀的版本管理软件,被众多人所采纳,为了协助团队记录版本的迭代过程以及每次的变更,使用SVN势在必行,但是在搭建网络服务时,很多人被困住了,无法前行,也无法理解到SVN的真谛,所以我建议初学者可以在本机搭建SVN本地文件管理。
  • rocket5725
  • rocket5725
  • 2013-08-19 23:20
  • 8671

TortoiseSVN入门篇 - 将已有项目代码加入svn版本控制

Windows下SVN实用教程(以TortoiseSVN作为client) by Nikolai Shokhirev Next: Repository backup and restore Contents 导引安装Subversion安装TortoiseSVN一步步地操作 步骤0:设...
  • yanglr2010
  • yanglr2010
  • 2015-12-17 22:20
  • 26882

SVN版本控制推荐使用方法

SVN版本控制推荐使用方法flyfish 2015-7-29目录结构 trunk/ branches/ tags/在branches中有按照每个人名字命名的文件夹,当做好自己的任务之后合并到trunk发布时从trunk的中创建tag tags +release1.0(copy from t...
  • flyfish1986
  • flyfish1986
  • 2015-07-29 18:12
  • 2017
    算法channel

    交流思想,注重分析,实例阐述,通俗易懂,包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!

    算法与人工智能交流群:646901659

    个人资料
    • 访问:319969次
    • 积分:7595
    • 等级:
    • 排名:第3382名
    • 原创:350篇
    • 转载:1篇
    • 译文:0篇
    • 评论:58条
    博客专栏