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

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

查看评论

SVN文件误删,再检出报红色X号

SVN本地删除了,从SVN上在检出的时候项目上仍然显示红色的X号,如图        解决方法是:将你的项目还原,先看看你有没修改的东西,有修改的文件,将文件复制出来,然后进行还原,再将修改的文件...
  • wu920604
  • wu920604
  • 2017-03-14 14:48:38
  • 3514

使用svn管理代码删除文件删除报红色警告问题

删除文件夹后点commit提交,但是报错,报错内容如下: 提示Description : Commit failed (details follow): Suggestion : The ope...
  • wushunjiewudi
  • wushunjiewudi
  • 2016-07-19 13:18:51
  • 1057

svn分支管理的使用与经验

最近项目用上了svn分支管理,因为项目太过庞杂,版本迭代也过于频繁,致使多个版本的代码交杂在一起,难以维护,无法保证其中某个版本的稳定性。当然,我们也用过很土的办法,代码复制一份出来,但是,这个副本也...
  • cwqcwk1
  • cwqcwk1
  • 2016-06-30 22:59:02
  • 21199

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

1. SVN标准目录 Subversion有一个很标准的目录结构,是这样的。比如项目是 proj,svn地址为 svn://proj/,那么标准的 svn 布局是: 这是一个标准的...
  • Garfield2005
  • Garfield2005
  • 2016-09-23 15:43:00
  • 11024

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

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

svn版本管理

转自:https://www.cnblogs.com/lpfuture/p/5853030.html 代码发布方案: 1,安装,优化 软件环境,(nginx,lvs) ...
  • zhanglizhi111
  • zhanglizhi111
  • 2017-12-02 13:19:29
  • 281

版本控制工具SVN使用详细解析

一.版本控制工具概述  svn是版本管理工具,主要帮助我们管理代码提交日志的。抛开系统来谈,svn分为服务端和客户端。就客户端而言,有很多第三方客户端,但是底层都是官方的命令行客户端。   在公司的...
  • a910626
  • a910626
  • 2016-05-17 11:34:19
  • 2228

svn代码版本管理总结

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

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

背景: 原本在学校跟随导师做项目的时候,就一直在使用版本管理,主要是用来记录项目的修改,项目成员之间的沟通和交流。使用的服务端是Visual SVN,客户端是TortoiseSVN,常用的Tort...
  • zssureqh
  • zssureqh
  • 2014-09-07 07:27:33
  • 59189

SVN版本管理工具的使用

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

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

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

    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 33万+
    积分: 7786
    排名: 3393
    博客专栏