SVN建立分支主干策略

本篇目录

前言

使用svn作为源码管理工具已有几年,但一直都只是使用到了trunk。最近项目中发版本每次都会将一个版本的文件拷贝打包为rar压缩文件,下个版本迭代则从新在svn服务端建立新的Repository用于管理。显然这tag版本脱离了svn的管理,日志记录也会发生断层。

因而最近就查阅了一些文章,结合实际对 trunk、tags、branches 进行体验操做,有点收获,怕之后忘了,故作此记录。

 

SVN分支管理策略

其中

Trunk:主开发分支,全部最新的代码都在这里。

Tags:一个里程碑版本,通常均可保证直接上线(名字:”V1.0”,”V1.1”,”V2.1”,”School_V1.0”,”School_V1.1”…),用于存放发布的版本。

Hotfix branch:修正bug的分支(名字:”hotfix_V1.x”,” School_hotfix_V1.x”, “School_hotfix_V1.x”),从须要修复的tag拉出分支,用于解决已上线版本的bug。

Customize branch:定制化需求的开发分支(名字:”School_Develop”…),用于定制化需求开发一个版本。

VisualSVN Server

服务端采用VisualSVN Server是免费的,而客户端VisualSvn是收费的,可以使用免费AnkhSvn替代集成至Visual Studio使用。VisualSVN Server的下载地址:https://www.visualsvn.com/server/download/,VisualSVN Server的安装使用网上有不少文章,此处不作描述。

TortoiseSVN客户端

Repository的建立


Check out

首先Checkout在服务端repository建立的Test,默认建立了三个空文件夹。

trunk建立新项目MyProject

trunk更新提交更新,迭代版本建立Tag V1.0

提交迭代版本更新。

基于trunk中最新版本建立Tag_V1.0。在/trunk/MyProject目录上右键,依次选择"TortoiseSVN" -> "Branch/tag...",在弹出窗口的"To path"中填入tag的地址。

提交后在文件夹更新后会在Test\tags文件夹下出现MyPro_V1.0文件夹,tags目录下的MyPro_V1.0文件夹就是以trunk中指定的版本拷贝的副本作为版本V1.0进行的封存。

基于Tag的Hotfix Branch

当版本V1.0发布上线后,出现线上bug后须要修复,则以Tag中MyPro_V1.0建立Hotfix Branch(步骤和建立Tag相似),在Hotfix的分支中修复问题。修复完成后须要将这次的改动Marge(合并)到trunk中同时创Tag_V1.1进行发布。

提交后在文件夹更新后会在Test\branches文件夹下出现bugfix_by_account文件夹,在此基础上修复问题并提交。

在/branches/bugfix_by_account目录上右键,依次选择"TortoiseSVN" ->"Revision graph",在弹出的窗口中能够看到版本分支图。


 

Hotfix Branch改动Marge(合并)到trunk中同时创Tag_V1.1进行发布

在/trunk/MyProject目录上右键,依次选择"TortoiseSVN" ->"Merge...",

点Next出现以下窗口,

若是trunk中的版本修改过的文件与Hotfix分支中的修改不重合则不会产生冲突。下图是trunk进行过版本提交,与Hotfix分支中的修改产生冲突。

点击 Edit Confict解决冲突。

冲突处理完后点击Resolved,冲突解决完成本地trunk中已包含Hotfix分支的内容,合并后须要提交至svn服务器。

Hotfix分支修复完成后建立Tag_V1.1与以前trunk建立Tag_V1.0相似。

完成以上动做后的版本分支图以下。

定制化分支Customize branch

定制化分支使用的方式和以前建立branch方式相似,在此不作赘述。

总结

合并发生在本地working copy,只要你不提交就不会影响到repository。

合并前必定要先update、commit,保证不会out of day,并将本地的修改保存到repository。

使用svn建立的分支都会在指定的文件夹中建立副本,若是是在不一样的分支文件夹中开发时候须要从新对项目配置(eg:IIS外部主机),也可在trunk中切换分支则不用修改配置,可是svn服务端须要保持可链接状态。

最后说一句用过git以后,不再想用其它[源代码]管理器。