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

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

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

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

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

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

什么情况会产生冲突?


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

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

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


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


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

1
2
3
4
5
66

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

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


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

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

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

11
2
3
4
5
6

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

0
1
2
3
4
5
6

这种情况会产生冲突吗?

结果是:会。

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

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

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


记录,为更好的自己!

SVN与TortoiseSVN实战:冲突详解(一)的更多相关文章

  1. SVN与TortoiseSVN实战:冲突详解(二)

    硬广:<SVN与TortoiseSVN实战>系列已经写了四篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...

  2. SVN与TortoiseSVN实战:文件加锁详解

    硬广:<SVN与TortoiseSVN实战>系列已经写了八篇,本篇是完结篇,整个系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,以技巧性为主. 本篇详解使用Tortoi ...

  3. SVN与TortoiseSVN实战:补丁详解

    硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...

  4. SVN与TortoiseSVN实战:补丁详解(转)

    硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...

  5. SVN与TortoiseSVN实战:属性的奇技淫巧(二)

    硬广:<SVN与TortoiseSVN实战>系列已经写了七篇,本系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解. 关于属性的奇技淫巧较多,分为两篇来写,第一篇详见< ...

  6. SVN与TortoiseSVN实战:属性的奇技淫巧(一)

    硬广:<SVN与TortoiseSVN实战>系列已经写了六篇,本系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,预计再用三.四篇来结束这个系列. 本篇详解一下SVN的属 ...

  7. ARP缓存表的构成ARP协议全面实战协议详解、攻击与防御

    ARP缓存表的构成ARP协议全面实战协议详解.攻击与防御 1.4.3  ARP缓存表的构成 在局域网的任何一台主机中,都有一个ARP缓存表.该缓存表中保存中多个ARP条目.每个ARP条目都是由一个IP ...

  8. SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支

    硬广:<SVN与TortoiseSVN实战>系列已经写了两篇,第一篇<SVN与TortoiseSVN实战:从入门到精通>,关于分支和标签的知识介绍可翻阅第二篇<SVN与T ...

  9. SVN与TortoiseSVN实战:标签与分支

    最近在写<IOS性能调优系列>,今天偷个懒,写写SVN与TortoiseSVN实战的第二篇,标签与分支. 第一篇详见<SVN与TortoiseSVN实战:从入门到精通> SVN ...

随机推荐

  1. jquery ajax 总是还未等到success回调就刷掉了,就进入了onError函数的错误案例分析

    jquery ajax 总是还未等到success回调就刷掉了,就进入了onError函数的错误案例分析: 同样的请求同时请求了2次,然后第二次的请求把第一次的给刷掉了! (比如:<div on ...

  2. PLSQL_性能优化工具系列16_Best Practices: Proactively Avoiding Database

    占位符 PLSQL_性能优化工具系列_Best Practices: Proactively Avoiding Database/Query Performance Issue

  3. (转)linux中fork()函数详解

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  4. android之location03

    private class ButtonListener implements OnClickListener { @Override public void onClick(View v) { // ...

  5. git分支管理和stash

    1 创建分支$ git branch 分支名 2切换到分支$ git checkout 分支名 3查看提交git log --oneline --decorate --graph --all 4 轻量 ...

  6. Perl中文/unicode/utf8/GB2312之间的转换

    参考:http://daimajishu.iteye.com/blog/959239不过具测试,也有错误:原文如下: # author: jiangyujieuse utf8;  ##在最后一个例子, ...

  7. 20145305 《Java程序设计》第3周学习总结

    教材学习内容总结 1."一类一文件" 2.参考名称与对象数据成员同名时,可以在数据成员前使用this区别 3.不能用==直接比较浮点数运算结果 4.=是用在指定参考名称参考某个对象 ...

  8. C++学习22 多态的概念及前提条件

    在<C++基类和派生类的赋值>一节中讲到,基类的指针也可以指向派生类对象.请看下面的例子: #include <iostream> using namespace std; c ...

  9. JAVA中的定时调度(Timer和TimerTask)

    某些时候我们需要定时去完成一些任务,这里举一个例子:我们需要在3秒钟后打印当前系统时间,此后每隔5秒重复此操作.代码如下: import java.util.TimerTask; import jav ...

  10. jQuery formValidator表单验证插件常见问题

    1.    如何实现一个控件,根据不同的情况,实现不同的控制? 2.    一个页面上我有几个tab页,如何实现每个Tab页上的控件单独校验? 3.    我采用的页面上文字问题的方式,点提交的时候, ...