SVN合并代码

开发中经常会遇到,由于版本进度等原因,必须需要通过建立分支,去解决一些问题。比如线上出现bug,但是主线代码已经在开发下一个版本了,不能立即上线,这里就需要每次更新版本的时候建立一个target(项目备份一下),这样有什么bug或者什么新需求之类的就可以写在那个target中,然后可以直接打包上线。主线就可以继续开发新需求,这样两边互不干扰,但是这样就会出现2个项目,代码还需要合并,否则那些修复的bug,或者需求没法放进主线代码中。这里就需要用到合并代码了,可以使用svn的merge进行2个项目之间的合并。
下面演示如何进行代码合并,由于是演示。所以不会像真实场景下,有那么多文件需要处理,解决冲突之类的,只要了解如何使用svn的merge即可,剩下的可以自己去拿项目去试。

注意:合并是合并到本地的working copy,合并前需要将项目更新或者提交代码,否则会未提交的代码可能会丢失

先建立1个空的项目,然后创建1个类,然后将这个项目复制一下,都提交到svn上。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在我们模拟在svnmergebranch上面新加一个类,然后提交代码
在这里插入图片描述
接下来我们就来合并这2个项目,将svnmergebranch合并到svnmergedemo项目中,在svnmergedemo文件夹上右键,选择"TortoiseSVN",然后选择"Merge"
在这里插入图片描述
选择合并的类型,这里有2中类型可选,一种是merge a range of revisions,还有种merge two different trees。
在这里插入图片描述
merge a range of revisions类型就是将分支修改合并到主线上来,分支可以选择一个或者多个版本,主线不能选择版本。
merge two different trees类型主线和分支都可以选择版本,合并的时候以选择的分支为主。合并时如果有不同,会将主线不同的删掉。from 和 to 要选择正确,from是主线,to是分支。
接下来我们来实战看看,先使用第一种合并方式,
在这里插入图片描述
选好我们的分支版本,即svnmergebranch,然后选择哪些版本进行合并,可以是all revisions,全部版本,也可以指定版本。
在这里插入图片描述
在这里插入图片描述
指定好版本之后下一步,这里可以选择是否比较空白等选项,然后可以先测试下合并,如果觉得没问题那就直接点击"Merge"
在这里插入图片描述
在这里插入图片描述
合并完成,后这里会显示。然后我们看看项目怎么样了。首先svnmergebranch项目没有任何变化,然后再看看svnmergedemo项目。
在这里插入图片描述
发现分支svnmergebranch项目中的demo2在svnmergedemo主线项目中也有了,现在提交下代码,然后继续模拟会有冲突的那种情况。
svnmergebranch分支项目中demo类中增加一个方法,然后demo2类中增加一个方法。
在这里插入图片描述
在这里插入图片描述
然后svnmergedemo主线项目中demo2也增加一个方法,demo不动。
在这里插入图片描述
这样的话,我们预估如果svnmergebranch合并到svnmergedemo中,demo不会有问题,直接将svnmergebranch分支中demo类的getDemoInfo11方法合并到svnmergedemo中,
然后demo2可能会冲突,需要人为解决,接下来我们试试看。
在这里插入图片描述
确实demo2类中有冲突了,接下来就去解决冲突。首先解决冲突需要知道,哪边的代码才是真正需要的,有些冲突是相同位置写了不同代码,这样2边代码如果都需要就可以都保留,如果是写了重复
代码,那就只能保留一边的。冲突解决了就可以提交了。
在这里插入图片描述
在这里插入图片描述
接下来我们试试使用merge two different trees来合并项目。
首先在svnmergedemo项目中,增加一个demo3类,然后在svnmergebranch项目demo2类getDemoInfo23方法里面增加一行代码,然后提交svn。
在这里插入图片描述
在这里插入图片描述
这里选择merge two different trees方式将分支代码合并到主线上来,这里记得from是主线svnmergedemo项目,to是分支 svnmergebranch项目,选择好版本以后进行合并。
在这里插入图片描述
在这里插入图片描述

会发现主线版本上新增的demo3类被删除了,分支上面demo2的更改内容同步到主线上来了,这就是这种类型的合并方法,分支代码合并上来的时候会吧主线上面新增的删掉,所以对这种类型
我们合并的时候应该注意,这里from里的版本不应该是主线最新的版本,而应该是当时拉取分支的时候的版本,也可以理解为是分支的第一个版本,然后to是分支的最新版本,这样才会把分支最新
的代码合并到working copy里,然后在同步合并将本地working copy合并到主线中。
接下来我们按照这个思路在试一次,先在主线svnmergedemo上新增一个类demo4,然后提交。然后在svnmergebranch分支上修改demo2类中getDemoInfo23方法,然后在合并,这里主线版本选的不是最新版本,而是提交demo4之前的版本,看看demo4还会不会删除。
在这里插入图片描述
在这里插入图片描述
选择完版本后,进行合并代码
在这里插入图片描述
发现只有demo2类被修改,demo4没有被删除了,
在这里插入图片描述 代码也同步到主线中了,这样就实现了分支向主线合并的功能,主线往分支也是同一个道理。