ZGIS | 创享天下
SVN 分支(branch)与主干(trunk)代码合并
序
在信息技术飞速发展的今天,为了加快开发的效率,提升各个部门的联动配合,SVN工具成为了我们必不可少的研发工具。
日益更新的用户需求和不断升级的版本,如何才能做到灵活控制版本,今天我们请到了智博创享web端开发大牛卢建敏,他将分享使用SVN的心得和经验。
版本库(repository)和项目创建
1、本地版本库(Repository)的创建
版本库(repository)的创建很简单,假设我要在E:zbcxTestRepository目录中创建版本库(repository),只需右键TestRepository文件夹或者在文件夹里右键,依次选择”TortoiseSVN” -> “在此创建版本库”,在弹出的窗口中选择创建目录结构。
完成后,启动版本库浏览器,查看创建好的目录结构。如此,版本库(repository)的创建完成。
注意:文件夹里必须是空的且没有写保护
2、trunk文件夹下创建新项目
在版本浏览器中创建文件夹加入文件
3、Check out
假设要从中央版本库中check out工程到本地目录。
在E:zbcxAppWeb目录下创建文件WebLyZsTest,然后在该文件夹上或文件夹里右键,选择”SVN 检出…”,在弹出的窗口中的”版本库 URL “中填入中央版本库的地址,其他默认即可,最后点击确定。
4、从主版本(trunk)创建分支版本(branch)
在WebLyZs/trunk目录上右键,依次选择”TortoiseSVN” -> “分支 /标记…”,在弹出窗口的”至路径”中填入分支的地址,在这里目标revision选择 “版本库中最新版本”,如下图所示,添加log后点击ok分支便建立了。
这个操作速度非常快,新建的branch在repository中其实只是一个指向trunk某个revision的链接而已,并没有真的复制文件。
合并简介
1、合并一个范围的版本
此类型应用最为广泛,主要是把分支中的修改合并到主干上来。
在主干上点击右键选择合并,然后选择合并类型:合并一个范围的版本。
合并的源URL填写的是要合并的分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的所有演变。
如果只是选择其中一个版本,或者几个版本,那么就表示只是将制定的n个版本的变化合并到主干上。
如果只是选择其中一个版本,那么表示只是选择那个版本的修改,之前或之后的修改将不被采纳。
2、合并两个不同的树
此类型与前两种类型不同,第一种类型可以选择分支合并的版本,主干不能选择版本;
而这种类型则是无论是主干还是分支都可以选择合并的版本,即可以选择过去的一个主干版本与分支的某个版本进行合并。
合并的时候以选择的分支版本为主,如果选择的主干版本与分支版本有不同的地方,合并时主干部分将被放弃。
起始URL:选择主干目录的URL(应当和当前工作副本的URL一致,这个是所谓的合并点)
结束URL:选择要合并的分支的URL。
起始和结束的版本:一般起始版本应当找到最后一次同步时的版本git分支合并到主干,如果从没有同步过(第一次合并),则选择创建分支时的版本,结束版本一般是最新版本,如果你不想将某些内容合并进主干的话,也可以选择一个合并点
主版本修改同步到分支版本
1、branch提交一个新文件
2、trunk紧接着提交一个修改
3、branch再次提交一个修改
4、将trunk中的修改同步到branch
1-3展示的是branch和trunk在独立、并行地开发。
为了避免两者的代码差异越来越大,后期难以合并。现在branch意识到是时候和trunk来同步一次代码(将trunk合并到branch)。
首先,在本地trunk中先update一下,有冲突的解决冲突,保证本地工作副本和版本库中trunk已经完全同步;
然后在分支工程WebLyZsBranches上右键,依次选择”TortoiseSVN” -> “合并…”,在弹出的窗口中选择第一项”合并一个范围内的版本”,适用于将某个分支或主版本上提交的多个revision间的变化合并到另外一个分支上。
点击下一步后,出现如下窗口:
由于是要从trunk合并到branch,理所当然这里的”合并的源URL”应该填trunk的路径,版本范围是你要将trunk的哪些revision所对应的变化合并到branch中;
可以是某一连串的revision,比如4-7,15-HEAD,也可以是某个单独的revision号。点击下一步后出现下图:
在这里建议忽略空白字符串的变化其余保留默认设置即可。
在点击合并按钮前你可以先试下测试合并,看成功与否,以及合并的详细信息。点击合并按钮后trunk所做的修改将同步到branch中。
5、提交合并后的branch
至此,branch已经完全和trunk同步,branch和trunk的代码暂时没有冲突,如果branch已经开发结束git分支合并到主干,那是时候将branch合并回trunk了,当然,如果branch还要继续开发,那你将不断地重复1-5这几个步骤。
注意:主版本修改合并到分支版本时,会以主板本为准,主版本修改后的新代码会覆盖调分支版本的代码,主板未修改的代码不会覆盖分支版本修改后的新代码,当两边同一行(块)代码同时发生修改,这时合并会发生冲突,按照正常的代码冲突解决方式去处理。如下图所示
将分支版本代码合并回主版本
1、将branch合并回trunk
一、单分支合并:
在本地trunk工程WebLyZs上右键;(注意是在主线的目录里右键)
依次选择”TortoiseSVN” -> “Merge…”,在弹出的窗口中,Merge type选择第二项“合并一个版本范围”’”,这种类型的合并适合在单分支开发结束后将所有的改动合并回主线。
点击下一步后出现如下窗口:
在这里,”From URL”选择branches/v2.3.1.20180228,选择所有或指定版本分支修改合并到trunk。后面的步骤和上文合并步骤一致,如有冲突参照前面的情况解决。
二、多分支合并:
参考单分支的分支操作,而多分支的情况相对复杂一些,分为两种:
分支中的起始版本一致
比方说现在有两个分支,分支branchesA 和分支branchesB 。
主干trunk 版本100 ,分支branchesA的版本101 ,分支branchesB的版本号102。
它们都是从主干trunk版本100 上创建的。
当分支branchesA和分支branchesB都各自完成开发,并且提交到SVN 上后。branchesA的版本号为111 ,而branchesB的版本号为120 。
分支起始版本一致
此时必须两步操作,并且操作在主干trunk的工作副本内执行:
1) 主干trunk合并分支branchesA
2)合并分支branchesA 后再继续合并分支branchesB
注意:完成第一步的时候不必提交。
整个合并的逻辑过程如下图所示:
分支中的起始版本不一致
假设现在有两个分支,分支branchesA 和分支branchesB 。
分支branchesA 是从主干trunk版本100 上创建,分支branchesA 版本101 。
创建分支branchesA 后,主干上又做了其他修改,并且更新成版本102 。
然后主干trunk版本102 的基础上创建分支branchesB ,分支branchesB版本号为103 。
两个分支各自开发,最终分支branchesA 版本号为112 ,而分支branchesB 的版本号为121 。
此时合并操作应该为三步,多的一步其实就是把起始版本统一:
1) 分支branchesA 更新主干100-101 的更新,在分支branchesA 的工作副本内执行。
2) 主干trunk合并分支branchesA
3)合并分支branchesA后的主干trunk合并分支branchesB
整个合并的逻辑过程如下图所示:
2、提交合并后的trunk
合并后的项目上右键, Commit。
3、删除branch
如果此时新加的功能已经开发完成并稳定运行,分支的使命已经完成,你可以删除你的分支,清理版本库。
4、查看log信息
至此,SVN版本合并的功能已经展示完成,开发者可以在log中可以找到之前合并的信息,了解当前代码所处的状态。
写在最后
分享知识的时光总是短暂的,我们希望每一次的分享都能让大家受益匪浅,不论是产品的分享,还是技术的探讨,每一次机会都弥足珍贵。
感谢我们本次的智博小咖,为我们带来这次知识的饕餮盛宴。
卢建敏
● 拥有地理信息系统软件开发5年经验
● 智博创享web端核心开发工程师
明日就是清明小长假了,在这里小编代表智博创享全体员工送您一份真诚的祝福:
让风筝飞,
飞走忧愁。
请踏青去,
去除烦恼。
把祖先祭,
祭走哀伤。
将柳枝插,
插满生机。
清明节至,
智博创享祝福您
健康平安,顺风顺水,吉祥如意。
PS:
点击原文阅读可查看公众号文章目录~
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688