trunk:主干,一般来说就是开发的主要呆的地方。
branch:是用来做并行开发的,这里的并行是指和trunk进行比较。
tag:一般情况下,tag,是用来做一个milestone的,不管是不是release,都是一个可用的版本。这里,应该是只读的。tag不能再做修改了,也就不再提交了,如果提交那么就是branches
最重要的:对于svn还要注意的一点,就是它是全局版本号
例子:
比如,3.0开发完成,这个时候要做一个tag,tag_release_3_0,然后基于这个tag做release,比如安装程序等。trunk进入3.1的开发,但是3.0发现了bug,那么就需要基于tag_release_3_0做一个branch,branch_bugfix_3_0,基于这个branch进行bugfix,等到bugfix结束,做一个tag,tag_release_3_0_1,然后,根据需要决定branch_bugfix_3_0是否并入trunk。对于svn还要注意的一点,就是它是全局版本号,其实这个就是一个tag的标记,所以我们经常可以看到,什么什么release,基于xxx项目的2xxxx版本。就是这个意思了。但是,它还明确的给出一个tag的概念,就是因为这个更加的可读,毕竟记住tag_release_1_0要比记住一个很大的版本号容易的多。
tag 和 基线的区别
tag: 在你fix任何一个bug或者一个小的阶段的时候都可以打一个tag, s9 Q" i' p" g- Q, K E
基线:需要经过评审,而且是下一个阶段的开发的基础,起承上启下的作用,通常与项目管理的里程碑对应,基线的任何改变都需要通过评审,比tag更严格,受控性更高,而且通常基线产品至少要进一次QA cycle!
两个东西的表现形式是一样的,都可以看着一个tag,定义和作用不同,管理方式也不同