转载出处:http://www.cnblogs.com/dafozhang/archive/2012/06/28/2567769.html

Subversion是一个自由开源的版本控制系统。在Subversion管理下,文件和目录可以超越时空。Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节。正因为如此,许多人将版本控制系统当作一种神奇的“时间机器”。

Subversion有一个很标准的目录结构,例如:项目是proj,svn地址为svn://proj/,那么标准的svn布局是svn://proj/|+-branches+-tags+-trunk

这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。对于这几个开发目录,一般的使用方法有两种。我更多的是从软件产品的角度出发(比如freebsd),因为互联网的开发模式是完全不一样的。

1.第一种方法,使用trunk作为主要的开发目录

一般的,我们的所有的开发都是基于trunk进行开发,当一个版本/release开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。当下一个版本/阶段的开发任务开始,继续在trunk进行开发。

此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch)进行开发。

例如,刚刚发布1.0,正在开发2.0,此时要在1.0的基础上进行bug修正。

按照时间的顺序

1.0开发完毕,代码冻结,基于已经冻结的trunk,为release1.0打tag

此时的目录结构为

svn://proj/

+trunk/ (freeze)

+branches/

+tags/

+tag_release_1.0 (copy from trunk)

2.0开始开发,trunk此时为2.0的开发版

发现1.0有bug,需要修改,基于1.0的tag做branch

此时的目录结构为

svn://proj/

+trunk/ ( dev 2.0 )

+branches/

+dev_1.0_bugfix (copy from tag/release_1.0)

+tags/

+release_1.0 (copy from trunk)

在1.0 bugfix branch进行1.0 bugfix开发,在trunk进行2.0开发

在1.0 bugfix 完成之后,基于dev_1.0_bugfix的branch做release等

根据需要选择性的把dev_1.0_bugfix这个分支merge回trunk(什么时候进行这步操作,要根据具体情况)

这是一种很标准的开发模式,很多的公司都是采用这种模式进行开发的。trunk永远是开发的主要目录。

2.第二种方法,在每一个release的branch中进行各自的开发,trunk只做发布使用。

这种开发模式当中,trunk是不承担具体开发任务的,一个版本/阶段的开发任务在开始的时候,根据已经release的版本做新的开发分支,并且基于这个分支进行开发。还是举上面的例子,这里面的时序关系是:

1.0开发,做dev1.0的branch

此时的目录结构

svn://proj/

+trunk/ (不担负开发任务 )

+branches/

+dev_1.0 (copy from trunk)

+tags/

1.0开发完成,merge dev1.0到trunk

此时的目录结构

svn://proj/

+trunk/ (merge from branch dev_1.0)

+branches/

+dev_1.0 (开发任务结束,freeze)

+tags/

根据trunk做1.0的tag

此时的目录结构

svn://proj/

+trunk/ (merge from branch dev_1.0)

+branches/

+dev_1.0 (开发任务结束,freeze)

+tags/

+tag_release_1.0 (copy from trunk)

1.0开发任务结束,做dev2.0分支

此时的目录结构

svn://proj/

+trunk/

+branches/

+dev_1.0 (开发任务结束,freeze)

+dev_2.0 (进行2.0开发)

+tags/

+tag_release_1.0 (copy from trunk)

1.0有bug,直接在dev1.0的分支上修复。

SVN中trunk,branches,tags用法详解(转载)的更多相关文章

  1. SVN中trunk,branches,tags用法详解

    原文地址:http://www.cnblogs.com/dafozhang/archive/2012/06/28/2567769.html Subversion有一个很标准的目录结构,是这样的.比如项 ...

  2. SVN中trunk,branches,tags用法详解【转】

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...

  3. SVN中trunk,branches,tags用法详解[重要]

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...

  4. SVN标准开发布局目录,trunk,branches,tags用法详解

    http://www.cnblogs.com/newstar/archive/2011/01/04/svn.html 关于 SVN 目录结构       Subversion有一个很标准的目录结构,是 ...

  5. SVN中trunk,branches,tags的使用明细--项目代码的管理

    SVN在项目开发过程中有两种模式: 第一种:Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局svn://proj/|+ ...

  6. SVN中trunk、branches、tags用法详解

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/. 那么标准的svn布局是:svn://proj/|+-trunk+-branches+-t ...

  7. Oracle数据库中序列(SEQUENCE)的用法详解

    Oracle数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  8. delphi中Application.MessageBox函数用法详解

    delphi中Application.MessageBox函数用法详解 Application.MessageBox是TApplication的成员函数,声明如下:functionTApplicati ...

  9. SVN 中trunk、tags、branches使用

    简介 我们都知道SVN是管理项目源代码的软件,可以把我们开发中的各个阶段的代码记录下来,供我们以后来使用,那么SVN具体的结构你是否知道呢?下面我们来介绍一下它的基本结构 Trunk.Branches ...

随机推荐

  1. Dedecms当前位置(面包屑导航)的处理

    一.修改{dede:field name='position'/}的文字间隔符,官方默认的是> 在include/typelink.class.php第101行左右将>修改为你想要的符号即 ...

  2. 转:MVC中的文件上传

    上传文件与与上传数据区别 上传数据主要指json等简单字符串,上传文件指的是上传word.excel图片等.在上传数据的时候enctype默认为第一个application/x-www-form-ur ...

  3. intellijidea课程 intellijidea神器使用技巧 6-2 数据库关联

    待温习完Spring之后再来看 database关联和表名字段等智能提示

  4. js的垃圾收集机制以及写代码如何处理

    程序都自己的内存,一旦内存过多就会清楚以前的缓存.所以,在写代码的时候,不要仅仅只会推变量到栈中,还要会将变量从栈中释放. 那么问题来了,我们应该如何将内存从栈中释放呢? 要释放变量,那就要从java ...

  5. BZOJ4503: 两个串(bitset字符串匹配)

    题意 题目链接 Sol Orz xudyh F个毛T啊..直接bitset一波就赢了啊...(虽然复杂度很假) 就是记录匹配串中每个元素出现的位置,将第\(i\)个位置的bitset右移\(i\)位后 ...

  6. html meta标签实现页面跳转

    refresh用于刷新与跳转(重定向)页面 refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址 <!DOCTYPE html> &l ...

  7. HTTP杂记

    HTTP请求中的浏览器Timing信息: stalled:浏览器发出请求到这个请求可以发出的等待时间 proxy negotiation: 代理协商的时间 request sent:请求的第一个字节发 ...

  8. android studio gradle统一管理版本

    创建config.gradle ext { android = [ compileSdkVersion : 26, buildToolsVersion : "26.0.2", mi ...

  9. 用Python爬虫对豆瓣《敦刻尔克》影评进行词云展示

    最近很想看的一个电影,去知乎上看一下评论,刚好在学Python爬虫,就做个小实例. 代码基于第三方修改 原文链接  http://python.jobbole.com/88325/#comment-9 ...

  10. BIN文件对象数据库,直接存储对象做数据库,小型项目用它准没错

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...