关闭

版本管理-SVN冲突爆红后如何通过颜色和快捷键准确无误地合并代码(一)

标签: svngit版本管理冲突
11411人阅读 评论(7) 收藏 举报
分类:

SVN冲突出现场景

如今是一个团结协作的时代,开发一个系统,往往会多人协作共同完成。版本管理是必不可少的,常用的软件有Git,SVN等。今天说一下,SVN管理版本时,如果出现冲突后,如何快速解决冲突。

首先说明一个问题,有一种情况无论如何都不会出现冲突。假如有一个叫qaz的程序员,他checkout了版本库,这样他拥有了一个工作副本。然后,他修改了某个文件IMRoot.cscommit到SVN,并且这个文件保证不会有其他人在他们的工作副本修改并提交到SVN。这种情况下,无论qaz 如何修改IMRoot.cs ,在commit时都不会发生冲突。

以上说了一种不会出现冲突的情况,那么什么应用场合可能会出现冲突呢?假如程序员wsx 他会修改文件 IMRoot.cs 并commit 到SVN,此时可能会引发冲突。

实例分析

下面,我们根据实际应用场合,模拟出现冲突,到如何通过SVN提供的Edit Conflicts 界面,通过颜色标识和操作按钮,快速准确地合并解决冲突。

开始,IMRoot.cs 文件主题内容是这样的,命名空间为了理解方便省略掉。


这里写图片描述

qaz 在文件的第14 行做了修改,其他的未作任何改动,并且将修改commit到了SVN。


这里写图片描述

wsx 在在第19行做了修改,修改如下,


这里写图片描述

并且在提交前update了(注意因为这个文件已经被qaz 做了修改,所以wsx 如果commit前不update,SVN是不允许提交的),然后commit,此时,SVN不会引发冲突,因为修改不是在同一行。SVN将qaz 的修改合并到了wsx 拥有的工作副本中,合并后文件如下所示,


这里写图片描述

为了故意引发冲突,假设qazwsx 同时都修改了第29行。前者修改第29行为如下,并且commite 到了SVN中


这里写图片描述

后者修改也同时修改了这一行,这意味他并没有update 这个文件,


这里写图片描述

然后他commit 到SVN时,提示先update ,紧接着出现冲突,如下所示,


这里写图片描述

此时,找到这个文件,右键选择Edit conflicts 按钮,弹出编辑冲突的界面,这才到了重点!


这里写图片描述

从上图可以看到,主要有3个子窗口组成,左上Theirs 为SVN版本库中(也就是qaz 刚才修改提交到SVN的版本),右上 Minewsx (正在提交到SVN发现冲突的他)的工作副本文件,下方为合并他俩的文件后的显示窗口。

以下为这3个窗口的局部视图,依次为左上,右上,下方,


这里写图片描述
左上


这里写图片描述
右上


这里写图片描述
下方

当面对以上3个窗口时,还是容易让人发蒙,尤其是文件比较复杂,冲突一大片,各种颜色掺杂在一起,不知如何下手,害怕把其他文件意外破坏和文件合并错误。那么怎么办呢?我们不妨先从简单的文件冲突入手,彻底理解各种颜色的含义,冲突行是如何标记的,这样我们才敢大胆地使用这个界面进行代码合并操作,不用担心合并后,把别的文件无辜干扰了或者出现合并错误的问题。

仔细观察以上3个窗口,我们发现,28行和29行之间多出来一行,即橙色行,并且TheirsMine 都含有这一行,这个是未冲突前,此行的内容,即刚开始的版本。第29行是爆红行、冲突行,相应字段还是黄色警示,并且在第3个窗口(下方窗口)第29行全是?????这种符号,意味着无法合并他俩对此行的同时修改,需要我们判断,要么采取Theirs 的,要么采取Mine 的,要么采取上一版本,要么重新商量一个相同的。SVN也提供了几个方便的右键按钮,提示如何做出这些选择,


这里写图片描述

use this text block : 选取选中行的内容
use this whole file :选取选中行所在文件的全部内容
use text block from mine before theirs :先用Mine的内容,后面接着用theirs的

假如第29行我们想采用qaz 的修改,那么,我们在左上窗口,选中第29行,右键选择 use this text block ,然后下方的视图变为如下,


这里写图片描述

第29行由一行??????变为左上窗口第29行的内容,颜色由爆红变为了浅绿色。这时候注意观察,在上一行橙色显示内容代表什么意思,注意最左侧有个 “-”提示,代表此行不会纳入合并文件中。

假如第29 行,我们都想纳入qazwsx 的修改,此时我们在左上窗口选择,use text block from mine before theirs ,即先用Mine的内容,后面接着用theirs的,选择后下方窗口合并内容如下,


这里写图片描述

可以看到,第29行,先显示Mine的,然后显示Theirs的。

这些操作后,我们点击上方的Mark as Resolved 按钮,然后保存即可。这样冲突就被解决掉了。然后wsxcommit 自己的内容到SVN。

冲突深度详细解决方案及可能带来的隐患思考

更加复杂的合并情况的详细解决方案及可能带来的隐患思考,见我的总结:版本管理-SVN冲突爆红详细解决方案及可能带来的隐患思考(二)

9
1
查看评论

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

从一个实际应用的负责冲突例子,图形化,手把手讲述如何通过颜色和右键命令解决冲突。深入分析SVN解决冲突后带来的副作用,比如字段重复,方法重复,导致这种现象的背后原因。同时,给出了解决这类问题的方法,比如,文件单一负责制多人尽量小改同一文件。
  • daigualu
  • daigualu
  • 2017-04-02 10:24
  • 2867

详解SVN文件冲突和树冲突解决方法

详解SVN文件冲突和树冲突解决方法 转自:http://developer.51cto.com/art/201005/202293.htm 本节和大家一起学习一下SVN文件冲突和树冲突,主要包括SVN文件冲突和树冲突如何出现,以及怎样解决这些冲突,希望通过本文的学习大家能够掌握住这些方法。 ...
  • shyu1989
  • shyu1989
  • 2014-01-05 15:05
  • 1420

SVN:冲突解决 合并别人的修改

在项目中,基本不可避免多个人同时参与一个项目,因此就可能会出现多个人同时修改一个文件的情况,就不可避免的会出现冲突。svn已经很聪明了,如果你和别人对于同一个文件的修改之间不存在重叠(比如你在文件最开始增加了一行,而你同事在文件的结尾出增加了一行),svn会自动将你们的修改进行合并,然而意外总是会发...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2015-07-09 11:04
  • 5065

版本控制之svn上的冲突的解决

1. 1. 1.1解决冲突①什么情况下会发生冲突<1>两个开发人员,Harry和Sally,分别从服务器端下载了文件A。<2>Harry修改之后,A变成了A',Sally修改之后,A变成了A''。<3>Harry先一步提交,使服务器端...
  • kaikai_sk
  • kaikai_sk
  • 2016-10-04 15:24
  • 544

实例讲解SVN分支和合并问题

本节向大家简单描述一下SVN分支和合并方面的知识,在学习SVN的过程中SVN分支和合并时经常遇到的问题,在这里和大家分享一下,希望本文对大家有用。 关于主线同SVN分支合并的概念及如何使用的误区此问题是在netbuddy的问题上研究而成,走出误区的过程中得到了pcplayer指
  • tearsmo
  • tearsmo
  • 2011-09-15 14:29
  • 7108

svn中合并(merge)问题和如何解决版本冲突

1.首先先解释一下合并中的两种方法      合并到
  • a5421901
  • a5421901
  • 2014-08-04 16:06
  • 5513

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

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

svn更新树冲突解决办法

之前一直对svn的原理了解的不是很透彻,今天有幸得一位同事帮助,明白了其中一种分支合并冲突的解决办法。 场景如下: 客户端工具:tortoiseSvn 分支情况: 要求:分支2是从分支1上建立的分支。现在分支1发布后已经合并到主干。分支2还在继续开发,期望更新分支1所有的变化。 问题:如图,如果直接...
  • curtguo
  • curtguo
  • 2014-01-24 17:45
  • 3864

Svn版本管理

1、SVN介绍 1.1 什么是SVN(Subversion)       SVN(Subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台开源的版本控制系统。SVN版本管理工具管理着随时间改变的各种数据。这些数据放置...
  • qq_32786873
  • qq_32786873
  • 2017-04-26 13:09
  • 777

原创 Eclipse中使用SVN插件Subclipse - 提交、更新、解决冲突、合并

举例说明一般同步代码的基本流程 测试于:Subversion 1.6.19,Subclipse 1.8.20, Eclispe Indigo | Windows xp 基本原则是:每次提交前需要先和线上的对比,先把冲突解决掉,然后把线上的更新到本地,最后把本地的提交上去。 右键项目...
  • xuchuangqi
  • xuchuangqi
  • 2016-11-14 23:19
  • 1769
    算法channel

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

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

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