svn的tag跟branch的区别

svn的tag和branch的区别
多年前第一次接触svn,就知道有tag和branch的区别,但一直没搞清楚具体的差异。现在基本懂一些了,在这里总结一下

branch是分支,branch的代码是会往前走的。而tag是标签,我理解代码是静止的

这样说可能比较抽象,举例进行说明。

branch主要会有这些应用的场景:

1、阶段性的版本发到现场使用,但trunk上还需要继续做开发。这时候就会拉一个branch来定位现场问题,并出补丁。trunk继续做开发,互不冲突。

2、需要开发一些定制的需求,这时候也可以拉一个branch专门来做定制需求开发,在定制需求测试完成以后,再合入trunk

tag主要会有这些应用的场景:

1、一个版本转测试,在转测试之前打一个tag。这样这个tag就和转测试的版本是完全一致的,可以很方便地定位问题。

比如说第一天,测试测出问题A,于是在trunk上修改了A.java。

然后第二天,测试测出问题B,定位到也是在A.java上,但是由于这个时候A.java已经和测试环境不再一致(因为第一天改了)。那这个时候,用转测试之前的那个tag,就可以用来定位问题B了

2、要基于一个版本做升级包了,可以先将svn锁库,然后打一个tag。这时候svn库就可以解锁了,trunk上继续提交代码都没关系。然后将原始版本的tag,以及刚打的tag进行比对,制作升级包

总的来说,branch的代码是动态的,还会继续往前走,在合适的时候再合入trunk;而tag的代码是静态的,可以理解为是只读的(当然tag也是可以写的,但这样的话就成了事实上的branch,用branch可能更合适)