2024年3月22日发(作者:)

1 / 5

SVN 主干(trunk)、分支(branch )、标记(tag)

在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆。

在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限

上和一般的目录没有区别。至于何时用tag,何时用branch,完全由人主观的根据规范和

需要来选择,而不是强制的(比如cvs)。

一般情况下,

trunk:

是用来做主方向开发的,一个新模块的开发,这个时候就放在trunk,当模块开发完

成后,需要修改,就用branch。

branch:

是用来做并行开发的,这里的并行是指和trunk进行比较。

tag:

是用来做一个milestone的,不管是不是发布版本,但都是一个可用的版本。这里,

应该是只读的。更多的是一个显示用的,给人一个可读的标记。

比如,3.0开发完成,这个时候要做一个tag,tag_release_3_0,然后基于这个tag

做发布,比如安装程序等。trunk进入3.1的开发,但是3.0发现了bug,那么就需要基

于tag_release_3_0做一个分支(branch),branch_bugfix_3_0,基于这个branch进行

bug修改,等到bugfix结束,做一个tag,tag_release_3_0_1,然后,根据需要决定

branch_bugfix_3_0是否并入主干(trunk)。

对于svn还要注意的一点,就是它是全局版本号,其实这个就是一个tag的标记,所

以我们经常可以看到,什么release,基于xxx项目的2xx版本。就是这个意思了。但是,

它还明确的给出一个tag的概念,就是因为这个更加的可读,毕竟记住tag_release_1_0

要比记住一个很大的版本号容易的多。

branches:

2 / 5

分枝

当多个人合作,可能有这样的情况出现:

John突然有个想法,跟原先的设计不太一致,可能是功能的添加或者日志格式的改进

等等,总而言之,这个想法可能需要花一段时间来完成,而这个过程中,John的一些操作

可能会影响Sally的工作,John从现有的状态单独出一个project的话,又不能及时得到

Sally对已有代码做的修正,而且独立出来的话,John的尝试成功时,跟原来的合并也存

在困难。这时最好的实践方法是使用branches。John建立一个自己的branch,然后在里

面实验,必要的时候从Sally的trunk里取得更新,或者将自己的阶段成果汇集到trunk