SVN与TortoiseSVN实战:冲突详解(一)
硬广:《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实战:冲突详解(一)的更多相关文章
- SVN与TortoiseSVN实战:冲突详解(二)
硬广:<SVN与TortoiseSVN实战>系列已经写了四篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...
- SVN与TortoiseSVN实战:文件加锁详解
硬广:<SVN与TortoiseSVN实战>系列已经写了八篇,本篇是完结篇,整个系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,以技巧性为主. 本篇详解使用Tortoi ...
- SVN与TortoiseSVN实战:补丁详解
硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...
- SVN与TortoiseSVN实战:补丁详解(转)
硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...
- SVN与TortoiseSVN实战:属性的奇技淫巧(二)
硬广:<SVN与TortoiseSVN实战>系列已经写了七篇,本系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解. 关于属性的奇技淫巧较多,分为两篇来写,第一篇详见< ...
- SVN与TortoiseSVN实战:属性的奇技淫巧(一)
硬广:<SVN与TortoiseSVN实战>系列已经写了六篇,本系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,预计再用三.四篇来结束这个系列. 本篇详解一下SVN的属 ...
- ARP缓存表的构成ARP协议全面实战协议详解、攻击与防御
ARP缓存表的构成ARP协议全面实战协议详解.攻击与防御 1.4.3 ARP缓存表的构成 在局域网的任何一台主机中,都有一个ARP缓存表.该缓存表中保存中多个ARP条目.每个ARP条目都是由一个IP ...
- SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支
硬广:<SVN与TortoiseSVN实战>系列已经写了两篇,第一篇<SVN与TortoiseSVN实战:从入门到精通>,关于分支和标签的知识介绍可翻阅第二篇<SVN与T ...
- SVN与TortoiseSVN实战:标签与分支
最近在写<IOS性能调优系列>,今天偷个懒,写写SVN与TortoiseSVN实战的第二篇,标签与分支. 第一篇详见<SVN与TortoiseSVN实战:从入门到精通> SVN ...
随机推荐
- linux命令(13) 删除指定文件夹下后缀名相同的文件
方法一: find 目录 -name "*.abc" | xargs rm命令有点危险,可以先执行前半段,看看是不是你要删除的文件, 然后再整条执行 方法二:find . -nam ...
- poj 1251 统计难题(字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 AC代码: #include<iostream> #include<algor ...
- [物理学与PDEs]第4章 反应流体力学
[物理学与PDEs]第4章第1节 引言 [物理学与PDEs]第4章第2节 反应流体力学方程组 2.1 粘性热传导反应流体力学方程组 [物理学与PDEs]第4章第2节 反应流体力学方程组 2.2 反应流 ...
- You need tcl 8.5 or newer in order to run the Redis test
安装Redis时候make test出现的 , 不用下什么tcl8.5再tar了 , 直接yum install tcl就好.
- unset是不能清除保存在本地电脑上的cookie的,用于session就可以(弄了半天原来是这样)
unset($_COOKIE["historyWord[$wordId]"]); 这样是不行的,unset只是将变量在脚本运行时注销,但是cookie是写在客户端的,下一次还是可以 ...
- select into from 和 insert into select 的用法和区别
select into from 和 insert into select都是用来复制表,两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建.insert ...
- html——SVG
SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用于定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺寸的情况下其图形 ...
- java 实例之杨辉三角
public class study{ public static void main(String args[]){ int i,j,level=7; int Yang[][] = new int[ ...
- DZ!NT论坛 3.6.711删除用户各种错解决方案
DZ!NT论坛 3.6.711删除用户各种错解决方案 首先删除一个用户~ado.net报错 对象名 'dnt_spaceposts' 无效. 对象名 'dnt_spaceconfigs' 无效. ...
- 第一课 opengl简介
1. 什么是opengl: opengl是图形硬件的一种软件接口. 2. opengl对场景中的图像进行渲染时所执行的主要图形操作 1)根据几何图元创建形状,从而建立物体的数学描述. 2)在三维空间中 ...