eclipse下svn的分支与合并操作

以下为分支、主线均有改动情况

源该地址:http://blog.csdn.net/tearsmo/article/details/6778143

本节向大家简单描述一下SVN分支和合并方面的知识,在学习SVN的过程中SVN分支和合并时经常遇到的问题,在这里和大家分享一下,希望本文对大家有用。
关于主线同SVN分支合并的概念及如何使用的误区此问题是在netbuddy的问题上研究而成,走出误区的过程中得到了pcplayer指点迷津。

 

一、我的合并需求
在主线的第54个版本上作了分支,在接下来的日子里,主线和分支同时都有修改,此时需要将分支上的改动合并到主线上,合并前主线和分支都已经提交,截至到合并前,主线的修改达到了版本号66,而分支的修改达到了68。主线和分支修改的文件不同。

 

二、我最初的错误操作
我当时的想法是合并,就是简单的把主线的最新版本和分支的最新版本合在一起就成了,而且这也是符合我们的手工习惯。于是我就作出了一个错误的操作:
1、在SVN分支的工作副本上单击右键,选择合并,出现合并对话框,在起始路径和版本号中选择主线的最新版本,在结束路径中选择分支的最新版本,然后单击合并,合并后,提示框内没有任何合并的内容。

2、上个操作不成功,于是胡乱进行这个操作,在主线的工作副本上单击右键,选择合并,出现合并对话框,在起始路径和版本号中选择分支的最新版本,在结束路径中选择主线的最新版本,然后单击合并,合并后,提示框内没有任何合并的内容。

3、发现第2个操作仍没有结果,更晕,于是进行下面的操作,在主线的工作副本上单击右键,选择合并,出现合并对话框,在起始路径和版本号中选择主线的最新版本,在结束路径中选择分支的最新版本,然后单击合并,合并后,提示框内提示有文件更新,打开更新的文件一看,原来是分支上的内容把主线上的工作副本覆盖了。于是进行下一个实验。

4、在SVN分支的工作副本上单击右键,选择合并,出现合并对话框,在起始路径和版本号中选择分支的最新版本,在结束路径中选择主线的最新版本,然后单击合并,合并后,提示框内提示有文件更新,打开更新的文件一看,原来是主线上的内容把分支上的覆盖了。
总结操作问题:合并的起始和结束路径不是同一路径,而是主线和分支两个不同的路径

 

三、我把这个问题发到论坛,pcplayer指出了我的错误,即“起始选择主线的最新版本,结束使用分支的最新版本”,并指明“应该选择一条线上的两个版本,这两个版本间的改动会以打补丁的形式合并到另外一条线上”,于是看了一遍subversion中文手册svnbook1.2版中第4章分支与合并,终于理解了合并的使用:
1、如果是需要将主线的改动合并到SVN分支上,需要在分支的工作副本下进行合并,合并的范围是需要从主线上上次合并的版本到当前主线上最新的版本,如果主线和分支都修改了相同的文件,合并后会出现冲突,然后解决冲突,如果主线修改但是分支没有修改,则主线上合并的变更内容会增加到当前副本中,提交,如果是第一次合并,则起始版本号是上次建立分支的版本号

2、相反,如果是需要将分支的改动合并到主线上,需要在主线的工作副本下进行合并,合并的范围是需要从分支上上次合并的版本到当前分支上最新的版本,合并后会出现冲突(冲突的前提如上种情况),然后解决冲突,提交,如果是第一次合并,则起始版本号是上次建立分支的版本号

3、正确的操作(对应我的需求,将分支上的改动合并到主线上):在主线的工作副本下单击右键,合并,在起始范围中选择分支的54版本,结束范围中选择分支的最新版本(当然也可以修改到中间的其他版本,例如65等),然后单击合并即可。由于我的需求中主线和分支修改的是不同的文件,所以不会存在冲突,合并完后直接提交即可。

 

四、合并的工作是把主线或者分支上合并范围内的所有改动列出,并对比当前副本的内容,由合并者手工修改冲突。如果当前工作副本是主线的,则合并的范围是分支上的改动,如果工作副本是分支的,则合并范围是主线上的改动。

以下为分支有改动,主线无改动情况

源文地址:http://huqilong.blog.51cto.com/53638/465988

之前一直使用"小乌龟"进行分支建立与合并,最近切换到linux下开发,没有"小乌龟"了,只好看下eclipse的svn插件关于分支的建立与合并。

       首先说说创建分支,很简单,不过是浅copy一个trunk目录到branches下即可.如下图所示:

         

右键你的工程==>team==>分支/标记

弹出如下信息:

此框告诉你从哪里copy到哪里,这里我们从trunk位置copy到branches目录,点击ok即可搞定创建,如果你勾选了下面的switch working copy to new branch/tag,eclipse 会自动切换到分支下.这里我们不选择,待会自己切换.

ok,分支建立好了,我们来查看下当前svn的目录结构,应该如下图所示:

可以看到branches里面多了一个cms2.0

           现在让我们手工切换到cms2.0分支下进行开发:

右键你的工程==>team==>切换==>

在窗口中填写你的分支路径,点击ok.

现在我们切换到了cms2.0 下了,开始开发吧,加入我们更新了pom.xml这个文件,我们在里面添加了一行比如aaaaaaaaaaaa,然后提交上去.   开发完毕,我们现在要切换回主干,也就是trunk下,按照上面的方法切换回去:

ok,现在就要把分支上的东西合并到主干了,怎么办呢。

右键单击你的工程==>team==>合并,然后弹出如下对话框:

 

上面的“起始路径”是指你要合并到的路径,这里我们选trunk下的cms

下面的目标路径是被合并的,也就是你的分支

“最新修订版”  与  “修订版”  必须选择一个,如果你选定了“修订版”而又没有填写版本号,合并按钮不可用,这里我们选择“最新修订版”,然后点击合并.

好了,现在看看,在branches下编辑的pom.xml文件时候被合并到trunk上了。

svn通常的做法是:首先尝试自动合并,如果自动合并搞定的话,只直接进行合并了,否则,需要人工干预,进行冲突解决.

大致这样子,tags下的操作差不多吧,只不过tags下的文件默认是只读的不能编辑.

写了有一会,看完给回个贴吧.多谢.

猜你喜欢

转载自chenjinbo1983.iteye.com/blog/1993083