SVN的branch和tag以前就知道,但是从来没有用程序控制添加过branch和tag。以前使用,要么是使用SVN的客户端插件,要么就是SVN的客户端软件,添加branch和tag的功能都是会提供的,但最近的一个项目,需要能够在自己的程序功能里面控制添加branch和tag。
先说说这两个东西。
一般来说,tag是用来标记里程碑的,不管是不是可以release,都是一个可用的版本。所以tag的作用是一个可读的标记,主要是显示用途。
branch是用来做并行开发的,这里的并行是指和trunk进行比较。比如,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要比记住一个很大的版本号容易的多。
对于branch和tag的实现,在SVN中,实际上都是使用copy实现的,所以他们在默认的权限上和一般的目录