SVN版本分支合并
SVN,开发中常用的工具,也没什么可说的。这里只是记录一下,以免太久不用了想用的时候又忘了。
首先已经有两个目录,一个是分支目录SVNChild,一个是主干目录SVNMain。SVNChild是从SVNMain分出来的一个版本,即整个代码结构(文件夹、代码文件)基本一样的,当然新添加了部分文件、修改文件是正常的。如果不是,则合并的选项都不是一样的。SVN的分支合并有三种,这里只说分支合并到主干,主干合并到分支两种,第三种没用过,不太清楚。分支合并到主干、主干合并到分支操作基本一样,这里就以主干合并到分支说明。
假如SVNMain主干的版本到了999,这时用版本900建立分支目录SVNChild,提交分支目录,则总的SVN版本到了1000。那我们就要注意3个版本了,一个是主干版本999,一个是分支版本900,总SVN版本1000。注意在提交分支目录时需要在log记录其版本为900,不然以后忘了,我真不知道分支是什么版本(PS:有知道的望指教)。
在SVNChild上右键--TortoiseSVN--Merge进行合并。
选择合并主干到分支,下一步
选择正确的SVN主干路径,然后就是填写需要合并的版本。比如需要合并版本900到最新版本(分支版本就是900),则填写900-HEAD,如果中间有一些版本不需要合并,如果906,908这两个版本不需要合并,则填写为900-905,907,909-HEAD。然后就是下一步了,会有一个test merge,会进行合并模拟,可以看到哪些文件被更新......确定是所需要合并的文件后,确定就OK了。合并完成后,只是把主干上的文件合并到本地,需要提交SVNChild目录。
最后,需要说明的是SVN版本不同可能会略有不同。还有就是SVN目录下的操作能提交的应尽快提交,一方面是防止代码丢失,另一方面是防止出现一些莫名其妙的错误。有些同事的SVN会更新不上(检查过没有冲突,没有忽略),也有过同事合并不了,没有错误,但在test merge这一步没显示任何文件被更新。后来也查不出来,把SVN目录删除重新checkout未发现什么问题。
------------------------------------------------------------------------------2014-05-25-----------------------------------------------------------------------------------
上一次项目发布新版本时,把主干上的版本跨版本融合到发布分支上了。即主干开发已给到1999了,发布分支停留在主干的1987版本上,那么这次要更新到1992版本。但是在主干上1996版本时修复了一些BUG,而1993-1995这些版本是不能发布的。所以我就把1987-1992,1996融合到发布分支上去了,其中跳过了一些版本。这没有发现问题。
结果最近一次发布新版本时,需要发布版本2008。由于上一次融合了版本1996,那么这些就是1992-1995,1997-2008这样了,感觉不会有问题,结果提示有冲突了。想一下,估计是1992-1995,1997-2008这些版本中修改了1996版本中的文件。因为当时发布时间很急,没来得及多想,先1992-1995融合,提交分支,然后再1997-2008这样分段融合,居然只是merge而不是conflict。用beyond comapre对比一下文件,没有发现问题,就发布了。
现在回想一下,做了一些验证。
首先,想一下为什么会conflict。条件是文件内容不一样(假设不能merge)并且本地的文件版本比要merge版本高或者是本地文件经过修改。文件不一样是肯定的,而且由于merge后再update会产生一个主干版本号,故就冲突了。因为我们是把主干合并到发布分支,其实我们期望的是做update,即在发布分支出现conflict时,以主干为准,直接update。但事实是,svn允许在分支上修改文件,故这要求对svn不适用,并不是所有用svn的人都不会在分支个修改文件。平时我们看到的update是因为同事修改了文件,update后版本更高。虽然我们本地的文件内容冲突,但版本高为准嘛。而不跨版本融合时(即使分多次融合,分支版本号比要merge版本高),要融合的文件版本号应该取的是主干上一次融合的版本号。
思路有点乱,也不一定正确。总结一下。当需要跨版本融合时,要保证中间的版本(如例子中的1996)的文件在之前版本不被修改。下面做验证时:
在上面的图中,log标明为step的修改的都是同一文件,other的则是每次都修改不同文件。发现在step中跨版本融合时,总会提示冲突
而修改不同文件的版本,则不会有问题。
另外,在新版本的SVN中,融合时show log会记录哪些版本已融合,已融合的为灰色并有融合图标
SVN版本分支合并的更多相关文章
- 关于SVN版本分支合并的知识
分支的合并类型 合并的工作是把主干或者分支上合并范围内的所有改动列出,并对比当前工作副本的内容,由合并者手工修改冲突,然后提交到服务器的相应目录里.如果当前工作副本是主干,则合并的范围是分支上的改动, ...
- windows 下svn 创建分支 合并分支 冲突
我用的系统是win7+Subversion 1.7.4.服务器搭建就略过了,我也是从网上找的,基本上就是几个命令吧!我用的CentOs6.5 .网上找了几个命令搭建很快,基本上是: 1.# sudo ...
- SVN创建分支/合并/切换使用
原文地址:https://blog.csdn.net/lisq037/article/details/17501327 最近接项目要求,要在svn主干上创建分支,用分支来进行程序的bug修改,而主干上 ...
- svn版本分支及冲突解决笔记
转载:http://blog.csdn.net/xuguiyi100/article/details/51966557 分支合并主干示例 1.主干工程右键选择merge合并下一步 2.选中merge ...
- SVN创建分支/合并分支/切换分支
在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录.这样在trunk中开始进行开发 trunk是主分支,是日常开发进行的地方. branch ...
- eclipse中svn从分支合并到主干及冲突解决
https://blog.csdn.net/shengqianfeng/article/details/79203156
- SVN的使用、分支合并及解决冲突详解
一.什么是SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. 二.SVN的下载安装 下载地址:http ...
- SVN - 主干/分支
一个大项目在开发中可能会拆分成几个小项目,分别分去,同时共通的部分再由人做,做完后再统一合并.同时,在开发中,共通的部分修改后,其它人要保持同步. 这种情况反应到SVN的分支/合并功能上,再贴切不过了 ...
- TortoiseSVN 的分支合并操作
今天对svn的分支合并有了兴趣,所以对新建了一个项目练练手. 在网上找了一篇文章做指导: http://www.open-open.com/lib/view/open1346982569725.htm ...
随机推荐
- hdu 4586 Play the Dice(概率dp)
Problem Description There is a dice with n sides, which are numbered from 1,2,...,n and have the equ ...
- 设置程序图标-初识IOS
相信我们都很喜欢做出的程序弄成自己的图标. 在创建项目过后显示的页面中,选择App lcons and launch images, 点击App lcons Source 之后的方向符号,把里面的东 ...
- 执行curl -sSL 提示curl: (35) SSL connect error
今天,添加容器节点报错,执行如下 curl -sSL https://shipyard-project.com/deploy| ACTION=node DISCOVERY=etcd://192.168 ...
- .NET基础拾遗(4)委托和事件2
事件 事件是对象发送的消息,以发信号通知操作的发生.操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的. 引发事件的对象称为事件发送方.捕获事件并对其作出响应的对象叫做事件 ...
- this函数的理解
Javascript的this用法 this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test(){ this. ...
- NFinal 揭秘之控制器
用NFinal框架开发的项目类似于MVC的那种开发方式,有Controller层.Model层.View层,还包括表现层Web层,在NFinal开发的项目中真正执行的代码也就是Web层中的代码,Web ...
- Asp.Net HttpApplication 事件汇总
Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看 ...
- poj1006 孙子定理
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 127944 Accepted: 40566 Des ...
- BestCoder Round #81 (div.2)1001
Machine Accepts: 580 Submissions: 1890 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65 ...
- C语言中的静态局部变量
代码: 0x601070 0x7ffcf44243fc 0x60106c 0x60106c 0x60106c [hu@localhost test]$ cat test.cpp #include &l ...