您的位置:首页 > 其它

svn中很有趣的东西(不要忽视空格和空行的力量)

2011-07-19 16:09 399 查看
前言:
1. svn分支合并的常见状态
U:更新(本地无修改,合并过来的分支有修改)
G:合并(本地有修改,合并过来的分支也有修改,不过可以通过svn内定规则合并到一起)
C:冲突(本地有修改,合并过来的分支也有修改,svn内定规则无法合并)
2. svn处理以行为基本单位
内容看着挺长,不过多数是图片,感兴趣可以看下,哈哈!


现象描述

首先来看一个文件的主干代码如下:

关注一下最后一个bean是wangwangMessageDAO(第29行),然后是一个空行(第30行),然后是beans的结束(第31行)



从主干上面拉了两个分支进行开发,分别叫做branch1和branch2,先来看branch1修改后的代码:

branch1在将第29行的bean进行了修改(这个不是这次主要分析的地方),然后在下面加入了一个bean(这个东西是重点)



再来看下branch2中对代码的修改

branch2在第29行的bean下面也新加了一个bean



branch1合并branch2,很明显,冲突了

冲突原因分析:首先branch1修改了第29行,但是branch2没有对29行进行任何修改,所以这里不会引起冲突,所以冲突只可能是因为两个branch中都新加了一个配置项引起的,有趣的是下面两个现象。
C    aliadmin-web/src/main/webapp/META-INF/autoconf/biz-dao.xml.vm


branch1中的文件进行一下修改,删除一个空行,再合并,成功了。。。



合并结果:
G    aliadmin-web/src/main/webapp/META-INF/autoconf/biz-dao.xml.vm


branch1中的文件进行一下修改,删除两个空行,合并,也成功了。。。



合并结果:
G    aliadmin-web/src/main/webapp/META-INF/autoconf/biz-dao.xml.vm


现象分析(简单的方式可以通过乌龟来看一下)


先来看下branch1最初修改的svn描述

文件的修改被认为是29行就行了删除又新增的操作(也就是修改啦),然后在30行(空行)和31行(结束行)之间新增了信息



再来看下branch2修改的svn描述

文件的修改被认为是在30行和31行之间新增了信息



同样是在30行和31行之间新增了信息,所以冲突


再来看下branch2删除一个空行后修改的svn描述

修改后的文件的第31行的空行被认为是基础文件的第30行的空行,这样一来就是在原来文件29行和30行之间新增了一行



这样一来branch1是在30行和31行之间新增了东西,而branch2是在29行和30行之间新增了一行,所以不会冲突。

再来看下branch2删除两个空行后修改的svn描述

去掉两个空行之后,svn认为第30行被修改为了新的内容



branch1是在30行和31行之间新增,而branch2是修改了第30行,所以也不会冲突。


一个感叹:svn对空格很"敏感"




想说明的东西

分支合并的时候不仅仅要关注C的,对G的最好也看一下,不然svn"智能"帮你组出来的东西不一定是你想要的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: