Svn的Trunk主干、Branches分支和Tags标签

Reading time ~8 minutes

此文章为原创文章,引用请标记文章出处: Svn的Trunk主干、Branches分支和Tags标签

我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发的通常模式

Trunk主干和Branches分支和Tags标签

  • Trunk主干

trunk主干,是主要的开发目录,还可以用于处理一些容易且能迅速解决的BUG,或者添加一些无关逻辑的文件(比如媒体文件:图像,视频,CSS等等)。

  • Branches分支

在版本控制的系统中,Branches分支是用来做添加新的功能以及产品发布后的bug修复等,这样可以不影响主要的产品开发线以及避免编译错误等。当我们添加的新功能完成后可以将其合并到主干中。

注意:

  1. 当一个branch完成了,并且认为它足够稳定的时候,它必须合并回它原来的拷贝的地方,也就是说:如果原来是从trunk中拷贝的,就应该回到trunk去,或者合并回它原来拷贝的父级branch。

  2. 除非是因为必须从一个branch中创建一个新的子branch,否则新的branch必须从trunk创建

  3. 建立的分支目的就是修改那些在主干中不会被修改的文件,以便修改完成后合并到主干中。

  • Tags标签

Tags目录一般是只读的,可以使用SVN中的authz文件控制该目录的访问权限为只读,Tags的创建主要用于在项目开发中的里程碑时或当trunk稳定后可以向外发布时,比如开发到一定阶段可以单独一个版本作为发布等,通常用于发布给客户使用。

还有一点值得注意的是,SVN不推荐在创建的Tag基础上Revision,这种情况应用Branches,因为Tag一般保持不变不作任何修改。

trunk、branches、tags的用法详解

当一个版本(trunk_release_2_0)开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag,如:tag_release_2_0,这个版本是可以交付给用户的。当下一个版本/阶段的开发任务(trunk_release_2_1)开始,继续在trunk进行开发。此时,如果发现了上一个已发行版本(trunk_release_2_0)有一些bug,或者一些很急迫的功能要求,而正在开发的版本无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch_bugfix_2_0)进行开发,等到bugfix结束,做一个tag,tag_release_2_0_1,然后,如果是修复bug的分支则需要把branch_bugfix_2_0并入trunk,如果是个性化功能则根据需要决定是否并入trunk。

为了便于创建分支和标签,我们习惯于将Repository版本库的结构布置为:/branches,/tags,/trunk。分别代表分支,标签以及主干。


project
  |
  +– trunk
        |
        +—– main.cpp  (2.0版本的最新文件)
        +—– common.h

  +– branches
  +     |
  +     +– r1.0
  +     +     |
  +     +     +—- main.cpp (1.x版本的最新文件)
  +     +     +—- common.h
  +     +
  +     +– r2.0
  +           |
  +           +—- main.cpp (2.x版本的最新文件)
  +           +—- common.h
  +
  +– tags   (此目录只读)
        |
        +– r1.0
        +     |
        +     +—- main.cpp (1.0版本的发布文件)
        +     +—- common.h
        +
        +– r1.1
        +     |
        +     +—- main.cpp (1.1版本的发布文件)
        +     +—- common.h
        +
        +– r1.2
        +     |
        +     +—- main.cpp (1.2版本的发布文件)
        +     +—- common.h
        +– r2.0
        +     |
        +     +—- main.cpp (2.0版本的发布文件)
        +     +—- common.h
        +
        +– r2.0.1
              |
              +—- main.cpp (2.0.1版本的发布文件)
              +—- common.h

工作流样例

假设你必须添加了一个特性至一个项目,且这个项目是受版本控制的,你差不多需要完成如下几个步骤:

  1. 使用SVNcheckout或者SVNswitch从这个项目的trunk主干获得一个branch分支

  2. 使用SVN切换本地代码为创建好的branch分支状态并完成新特性的开发(当然,要做足够的测试,包括在开始编码前)

  3. 一旦这个特性完成并且稳定(已提交),并经过你的同事们确认,切换本地代码为trunk状态

  4. 本地通过svn合并开发好的branch分支代码,重新检查合并后的代码并且解决一系列的冲突

  5. commit本地代码至项目的trunk上

  6. 如果某些部署需要特殊的环境(生成环境等等),请更新相关的tag至你刚刚提交到trunk的修订版本,使用SVNupdate部署至相关环境

参考资料

  1. http://www.cnmiss.cn/?p=296

jdk-timer、spring-task、quartz的比较

这篇文章将简单介绍目前常用的定时任务框架! Continue reading

小岛经济学-读书笔记

Published on May 10, 2018

java常见的http请求库

Published on May 05, 2018