`
aikawa_wang
  • 浏览: 809 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用svn — 项目的目录布局

svn 
阅读更多

Subversion有一个很标准的目录结构,是这样的。
比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是

svn://proj/
|
+-trunk
+-branches
+-tags

这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。

对于这几个开发目录,一般的使用方法有两种。我更多的是从软件产品的角度出发(比如freebsd),因为互联网的开发模式是完全不一样的。
第一种方法,使用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永远是开发的主要目录。

第二种方法,在每一个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://proj/
             +trunk/ 
             +branches/
                           +dev_1.0 (1.0bugfix)
                           +dev_2.0 (进行2.0开发)
             +tags/
                     +tag_release_1.0 (copy from trunk)

选择性的进行代码merge
这其实是一种分散式的开发,当各个部分相对独立一些(功能性的),可以开多个dev的分支进行开发,这样各人/组都不会相互影响。比如dev_2.0_search和dev_2.0_cache等。但是这样merge起来就是一个很痛苦的事情。

这里要注意一下的,第六步进行选择性的merge,是可以当2.0开发结束后一起把dev_1.0(bugfix用)和dev_2.0(新版本开发用)merge回trunk。或者先把dev_1.0 merge到dev_2.0,进行测试等之后再merge回trunk。
这两种方法各有利弊,第一种方法是可以得到一个比较纯的dev_2.0的开发分支,而第二种方法则更加的保险,因为要测试嘛。

以上呢,就是我说的两种开发模式了,具体哪种好,并没有定论。这里大致的说一下各自的优缺点
第一种开发模式(trunk进行主要开发,集中式):
优点:管理简单
缺点:当开发的模块比较多,开发人数/小团队比较多的时候,很容易产生冲突而影响对方的开发。因为所有的改动都有可能触碰对方的改动
第二重开发模式(分支进行主要开发,分散式):
优点:各自开发独立,不容易相互影响。
缺点:管理复杂,merge的时候很麻烦,容易死人。

其实,这里并没有一定之规,更多的时候是两种模式结合使用。我个人来说是采用第一种方式为主,在某些情况下使用第二种方法。
如果你还有其他的好的方法,那么请赐教。:)

 

分享到:
评论

相关推荐

    SVN版本库布局详解一.doc

    ### SVN版本库布局详解 #### 一、SVN版本库的基本结构 在使用Subversion (SVN) 进行版本控制时,一个典型的版本库结构通常包含三个主要部分:`trunk`、`branches` 和 `tags`。这种布局不仅有助于保持代码库的整洁...

    SVN项目版本库模板

    "SVN项目版本库模板"通常是指一组预配置的SVN目录结构和文件,旨在为新项目提供一个标准起点,简化项目的初始化过程。 **SVN版本库的组成部分:** 1. **仓库(Repository)**:这是SVN存储所有版本化文件的地方。...

    SVN项目整合工具

    在SVN项目中,site.xml可能是网站配置文件,例如Maven或Apache的站点配置,用于定义网站布局、文档生成等。它有助于构建过程自动化,生成项目的文档和发布页面。 5. **features和plugins** 这两个文件夹可能包含...

    SVN使用手册中文版快速入门

    下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup svn import 摘要 4. ...

    svn客户端使用手册.doc

    - **Repo-Browser**:浏览SVN仓库的结构和内容,了解项目布局。 - **Update to revision**:选择特定版本进行更新,便于回滚至某一历史状态。 - **Rename**:修改文件或目录名称,但需谨慎操作以防影响版本控制。 - ...

    SVN使用手册中文版.chm

    下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup svn import 摘要 4. ...

    svn-book svn手册

    - **推荐的仓库布局**:通常建议在仓库根目录下创建不同的子目录来分别存放项目代码、文档和其他资源等。 ##### 创建工作副本 - **检出(Checkout)**:通过`svn checkout`命令可以从仓库中检出最新版本的代码到...

    SVN tutorial

    - **推荐的仓库布局**:通常建议为不同的功能或项目创建单独的目录结构。 ##### 创建工作副本 - 使用`svn checkout`命令从仓库中检出一份最新的版本到本地作为工作副本。 ##### 基本工作流程 - **更新工作副本**:...

    SVN 使用全攻略

    ### SVN使用全攻略知识点梳理 #### 一、TortoiseSVN概述 - **定义**:TortoiseSVN是一款面向Windows操作系统的Subversion客户端工具,它为用户提供了一个直观且功能丰富的图形界面来管理和操作SVN版本库。 - **特点...

    svn1.10jar包

    SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。1.10是SVN的一个版本,这个"svn1.10...通过理解和使用这个jar包,开发者可以更好地利用SVN进行协同开发,提高软件项目的管理效率。

    idea工具下载到配置svn项目(maven)到启动项目的过程

    对于初次使用者,熟悉IDE的布局和快捷键也非常重要,这能显著提高开发效率。 接下来是配置SVN。在IDEA中,你可以通过内置的VCS(Version Control System)支持来管理版本控制。点击菜单栏的“VCS” -> “Enable ...

    svn-site插件

    2. **模板定制**:用户可以根据需求定制站点模板,以呈现特定的布局和风格,提高项目的专业形象。 3. **内容管理**:通过`svn-site`,项目成员可以在SVN仓库中直接编辑和提交站点内容,版本控制功能确保了每次更改...

    Eclipse SVN插件 Eclipse SVN插件

    Eclipse SVN插件是开发人员在使用Eclipse集成开发环境时,用于版本控制的重要工具,主要功能是与Subversion(SVN)服务器进行交互,实现代码的版本管理。本篇文章将详细阐述Eclipse SVN插件的相关知识点,包括其安装...

    SVN手册 For Subversion 1.7

    Subversion(简称SVN)是一种广泛使用的集中式版本控制系统,它通过记录每次对项目所做的更改来维护文件的历史版本。 - **仓库(Repository)**:SVN的核心是仓库,它是一个特殊的目录,其中包含了所有文件及其历史...

    svn转化为git

    `git svn clone`命令会自动处理SVN的分支和标签,但如果你的项目有非标准的布局,可能需要手动配置。 7. **推送到新的Git远程仓库** 创建一个新的Git远程仓库(如在GitHub或GitLab),然后将本地Git仓库的所有...

    svn中文语言包

    SVN(Subversion)是一种广泛使用的版本控制系统,用于管理对文件和目录的修改历史。它允许团队成员协作编辑和管理项目资源,同时保持版本控制,防止数据丢失或冲突。中文语言包是为SVN提供的本地化支持,使得不熟悉...

    Maven配置SVN的方法和SVN包全套

    在软件开发过程中,版本控制系统是不可或缺的工具,Subversion(简称SVN)就是其中的一种,它用于管理项目源代码的历史版本,确保团队协作时代码的一致性和可追踪性。Maven作为Java项目管理和构建工具,同样支持与...

    svn plugin

    SVN(Subversion)插件是一种用于集成版本控制系统Subversion到特定开发环境或工具的软件组件。Subversion本身是一个开源的版本控制系统,用于管理文件...了解和熟练使用SVN插件,能有效提升团队协作和项目管理的质量。

    SVN使用指南.doc

    SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。TortoiseSVN 是 SVN 的一个图形化客户端,尤其适合在 Windows 操作系统中使用。本指南将详细介绍 TortoiseSVN 的日常使用方法。 ...

Global site tag (gtag.js) - Google Analytics