trunk、branches、tags简介
Subversion有一个很标准的目录结构,是这样的。比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是svn://proj/|+-trunk+-branches+-tags
trunk:表示开发时版本存放的目录,即在开发阶段的代码都提交到该目录上。
branches:一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。
tags:tags目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档。
SVN开发流程
对于这几个开发目录,一般使用trunk作为主要的开发目录,我们的所有的开发都是基于trunk进行开发,当一个版本/release开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。当下一个版本/阶段的开发任务开始,继续在trunk进行开发。
此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing
Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch)进行开发。开发完成之后基于这个branch做tag,最后根据需要是否将该tag并入trunk。
SVN开发流程样例
比如,abc 开发完成,做一个tag(tag_abc_release_1.0),然后基于这个tag做release,比如安装程序等。trunk进入下一个任务的开发,这个时候发现了bug,那么就需要基于tag_abc_release_1.0做一个branch(branch_abc_bugfix_1.0),基于这个branch进行bugfix,等到bugfix结束,做一个tag(tag_abc_release_1.1),然后,根据需要决定branch_abc_bugfix_1.0是否并入trunk。
具体需求分析
有一天,突然在trunk下的core中发现一个致命的bug,那么所有的branches一定也不一样了,该怎么办?
方法:
在工作目录下右键trunk文件夹,选择Merge功能。