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版本分支合并的更多相关文章

  1. 关于SVN版本分支合并的知识

    分支的合并类型 合并的工作是把主干或者分支上合并范围内的所有改动列出,并对比当前工作副本的内容,由合并者手工修改冲突,然后提交到服务器的相应目录里.如果当前工作副本是主干,则合并的范围是分支上的改动, ...

  2. windows 下svn 创建分支 合并分支 冲突

    我用的系统是win7+Subversion 1.7.4.服务器搭建就略过了,我也是从网上找的,基本上就是几个命令吧!我用的CentOs6.5 .网上找了几个命令搭建很快,基本上是: 1.# sudo  ...

  3. SVN创建分支/合并/切换使用

    原文地址:https://blog.csdn.net/lisq037/article/details/17501327 最近接项目要求,要在svn主干上创建分支,用分支来进行程序的bug修改,而主干上 ...

  4. svn版本分支及冲突解决笔记

    转载:http://blog.csdn.net/xuguiyi100/article/details/51966557 分支合并主干示例 1.主干工程右键选择merge合并下一步 2.选中merge ...

  5. SVN创建分支/合并分支/切换分支

    在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录.这样在trunk中开始进行开发 trunk是主分支,是日常开发进行的地方. branch ...

  6. eclipse中svn从分支合并到主干及冲突解决

    https://blog.csdn.net/shengqianfeng/article/details/79203156

  7. SVN的使用、分支合并及解决冲突详解

    一.什么是SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. 二.SVN的下载安装 下载地址:http ...

  8. SVN - 主干/分支

    一个大项目在开发中可能会拆分成几个小项目,分别分去,同时共通的部分再由人做,做完后再统一合并.同时,在开发中,共通的部分修改后,其它人要保持同步. 这种情况反应到SVN的分支/合并功能上,再贴切不过了 ...

  9. TortoiseSVN 的分支合并操作

    今天对svn的分支合并有了兴趣,所以对新建了一个项目练练手. 在网上找了一篇文章做指导: http://www.open-open.com/lib/view/open1346982569725.htm ...

随机推荐

  1. servlet下载,解决文件名中有中文下载路径出现乱码不能正常下载问题

    方法很多种,我只试用了两种. 主页面JSP中引入下载功能所需的js文件.引入的时候设置编码格式例如 <script type="text/javascript" charse ...

  2. 20个经典bootsrtap后台html站点模板推荐

    今天为大家推荐20款不同风格的Bootstrap后台管理模板,每一款都经典可用,能预览和下载,保证让你挑得眼花缭乱. 1,Simpli flag蓝色 Simpli Flat蓝色管理模板是一款採用Fla ...

  3. POJ 1322 Chocolate

    Chocolate Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8245   Accepted: 2186   Speci ...

  4. Sqlserver in 实现 参数化查询 XML类型

    原文: http://www.cnblogs.com/tangruixin/archive/2012/04/23/2465917.html 1:如果参数是int类型: declare @a xmlse ...

  5. eclipse 汉化

    对于: Eclipse Standard/SDK Version: Luna Release (4.4.0) 对应的网络地址:http://download.eclipse.org/technolog ...

  6. Android开发环境的搭建之(一)Java开发环境的安装

    (1)  安装JDK(Java Developer Kit).下载JDK1.8并安装jdk-8u60-windows-i586.exe.下载官方链接http://www.oracle.com/tech ...

  7. StartService与BindService

    效果图 MainActivity.java package com.wangzhen.servicedemo; import com.lidroid.xutils.ViewUtils; import ...

  8. tableview 分割线置最左边的解决方法

    首先在viewDidLoad方法加入以下代码: if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [se ...

  9. UIAlertController的创建以及添加

    个人还是更喜欢以前的UIAlertView的创建方法,更新后的UIAlertController虽然说将UIAlertView和UIActionSheet的功能和作用以一种模块化替换的方式来代替,但是 ...

  10. hdu3714 三分

    Error Curves Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...