• SVN与TortoiseSVN实战:冲突详解(一)


    硬广:《SVN与TortoiseSVN实战》系列已经写了三篇,第一篇《SVN与TortoiseSVN实战:从入门到精通》,第二篇《SVN与TortoiseSVN实战:标签与分支》和第三篇《SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支》重点介绍了标签和分支的概念及实际操作演示。

    在写到SVN分支合并时,有评论中也提到合并后发生冲突的问题,相信关于冲突的知识也是开发人员的痛点。

    关于冲突的知识,重点介绍以下几个方面:

    1、什么情况会产生冲突?

    2、冲突发生时产生的三个文件是什么含义?

    3、怎样使用TortoiseSVN解决冲突?

    什么情况会产生冲突?


    当我第一次使用SVN这类项目管理工具时,心中就有一个疑问:多个人同时编辑一个文件会发生什么情况?

    为了模拟这种情况,我通过使用另外一个账号签出上一篇中的项目,来模拟多个用户同时操作的情况(在TortoiseSVN的设置对话框里通过Saved Data可以删除保存的账号信息以便重新登录)。

    现在test目录中新建一个测试文本文件,输入以下内容并签入,然后签出到testother目录中:

    1
    2
    3
    4
    5
    6

    首先编辑test目录中的测试文本文件,把第一行的1改为11,保存后签入到SVN:

    11
    2
    3
    4
    5
    6

    现在编辑testother目录中的测试文本文件,把最后一行6改为66,保存后签入到SVN:

    1
    2
    3
    4
    5
    66
    

    在签入testother的修改时,会提示我们该文件已过期,需要首先签出最新版本:

    当我们签出后TortoiseSVN会提示让我们再次尝试签入,这次签入会成功,在这个过程中没有发生冲突,testother目录中的测试文本文件的内容为:

    11
    2
    3
    4
    5
    66

    可以看到内容自动合并了来自两个目录下的修改,那什么情况下会产生让人头疼的冲突呢?

    上面的操作之所以没有产生冲突,是因为两个目录中对文件内容的修改没有在同一个位置,如果在testother目录中对第一行进行修改(比如不修改6,而把1改为111),就会产生冲突。

    可能有人看到这里就会想到以下这种情况,还是在test目录中修改1为11:

    11
    2
    3
    4
    5
    6
    

    在testother中的第一行前新建一行,修改为:

    0
    1
    2
    3
    4
    5
    6
    

    这种情况会产生冲突吗?

    结果是:会。

    这是因为SVN并没有那么智能,认为你是新建了一行,SVN对于冲突的判断关键在于对相同位置上内容的修改,所以当你新建一行时就改动了所有后边的位置。

    了解了这些大家基本对SVN冲突产生的原理应该认识的非常透彻了。

    关于冲突的其他几个问题稍后讲解,一篇没有办法写的太详细。


    记录,为更好的自己!

  • 相关阅读:
    线程池中shutdown()和shutdownNow()方法的区别
    java.util.concurrent.TimeoutException: Idle timeout expired: 300000/300000 ms
    ConnectTimeout和ReadTimeout所代表的意义
    hive 查询注意问题
    java面试题之int和Integer的区别
    MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的区别
    MySQL数据库使用mysqldump导出数据详解
    C++宏定义详解
    OTL调用存储过程/函数及注意事项
    linux自定义开机启动服务和chkconfig使用方法
  • 原文地址:https://www.cnblogs.com/ym123/p/4345771.html
Copyright © 2020-2023  润新知