本节向大家简单介绍一下SVN分支与合并方面的知识,主要有SVN合并结构介绍以及SVN合并分支时应该注意的一些问题,希望通过本节的学习大家对SVN合并相关知识有一定的认识。首先看一下SVN合并的介绍。
SVN合并
合并包含两点,首先两个版本库树比较,然后将区别应用到本地拷贝。
这个命令包括三个参数: 初始的版本树(通常叫做比较的左边), 最终的版本树(通常叫做比较的右边), 一个接收区别的目标拷贝(通常叫做合并的目标)。
一旦这三个参数指定以后,两个目录树将要做比较,比较结果将会作为本地修改应用到目标工作拷贝,当命令结束后,结果同你手工修改或者是使用svn add或svn delete没有什么区别,如果你喜欢这结果,你可以提交,如果不喜欢,你可以使用svn revert恢复修改。
合并的工作是把主线或者分支上合并范围内的所有改动列出,并对比当前副本的内容,由合并者手工修改冲突。如果当前工作副本是主线的,则合并的范围是分支上的改动,如果工作副本是分支的,则合并范围是主线上的改动
(1)主干合并到分支
如果是需要将主线的改动SVN合并到分支上,需要在分支的工作副本下进行合并,合并的范围是需要从主线上上次合并的版本到当前主线上最新的版本,如果主线和分支都修改了相同的文件,合并后会出现冲突,然后解决冲突,如果主线修改但是分支没有修改,则主线上合并的变更内容会增加到当前副本中,提交,如果是第一次合并,则起始版本号是上次建立分支的版本号
(2)分支合并到主干
如果是需要将分支的改动合并到主线上,需要在主线的工作副本下进行合并,合并的范围是需要从分支上上次合并的版本到当前分支上最新的版本,合并后会出现冲突(冲突的前提如上种情况),然后解决冲突,提交,如果是第一次合并,则起始版本号是上次建立分支的版本号
SVN合并分支时很关键的一点
在使用TortoiseSVN对Subversion进行分支合并时,Merge界面上有两个选项:From和To。这两个选项应该如何设定呢?
对于合并的这操作,Subversion上对其有如下的解释:
引用
迷惑的主要原因是这个命令的名称,术语“合并”不知什么原因被用来表明分支的组合,或者是其他什么神奇的数据混合,这不是事实,一个更好的名称应该是svndiff-and-apply,这是发生的所有事件:首先两个版本库树比较,然后将区别应用到本地拷贝。
这个命令包括三个参数:
初始的版本树(通常叫做比较的左边),
最终的版本树(通常叫做比较的右边),
一个接收区别的工作拷贝(通常叫做合并的目标)。
一旦这三个参数指定以后,两个目录树将要做比较,比较结果将会作为本地修改应用到目标工作拷贝,当命令结束后,结果同你手工修改或者是使用svnadd或svndelete没有什么区别,如果你喜欢这结果,你可以提交,如果不喜欢,你可以使用svnrevert恢复修改。还有更详细的说明:
引用
为了表示你的分支上的修改,你只需要比较分支的初始状态与最终状态,在你的分支上使用svnlog命令,你可以看到你的分支在341版本建立,你的分支最终的状态用HEAD版本表示,这意味着你希望能够比较版本341和HEAD的分支目录,然后应用这些分支的修改到主干目录的工作拷贝。
其实使用这个功能后的过程是把To的版本和From版本进行对比,然后把之间的差异合并到当前的版本中。比如要把一个分支的修改全部给合并进来,From就应该选择主线创建了分支的那个版本,To就应该选择分支的Head版本。如果版本选择的不正确,比如说From选择了主线的Head版本,就会把所有分支和主线Head不同的文件都覆盖到主线上来,造成主线上修改信息的丢失。本节关于SVN合并方面的知识介绍完毕。
【编辑推荐】