`
xwj_1998
  • 浏览: 8008 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

在svn中如何使用tag,branch,trunk等功能(转)

 
阅读更多

http://wolfgangkiefer.blog.163.com/blog/static/8626550320111209363246/

 

很久以前,上springsource网站下载源码和示例时,经常看到trunk,branch,tag等目录,当时没有太注意这里面的区别,经常一股脑都给下来了。今天讲讲这几个东西的区别和应用场景,在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆。
        在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别。至于何时用tag,何时用 branch,完全由人主观的根据规范和需要来选择,而不是强制的(比如cvs)。
        一般来说,tag,是用来做一个milestone的,不管是不是release,都是一个可用的版本。这里,应该是只读的。更多的是一个显示用的,给人一个可读 (readable)的标记。而branch,是用来做并行开发的,这里的并行是指和trunk进行比较。这样大家就知道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要比记住一个 很大的版本号容易的多。

一种说法:
branches:分枝
        当多个人合作,可能有这样的情况出现:John突然有个想法,跟原先的设计不太一致,可能是功能的添加或者日志格式的改进等等,总而言之,这个想法可能需 要花一段时间来完成,而这个过程中,John的一些操作可能会影响Sally的工作,John从现有的状态单独出一个project的话,又不能及时得到 Sally对已有代码做的修正,而且独立出来的话,John的尝试成功时,跟原来的合并也存在困难。这时最好的实践方法是使用branches。 John建立一个自己的branch,然后在里面实验,必要的时候从Sally的trunk里取得更新,或者将自己的阶段成果汇集到trunk中。
(svn copy SourceURL/trunk DestinationURL/branchName -m "Creating a private branch of xxxx/trunk." )
trunk:主干
      主干,一般来说就是开发的主要呆的地方,
tag:
      在经过了一段时间的开发后,项目到达了一个里程碑阶段,你可能想记录这一阶段的代码的状态,那么你就需要给代码打上标签。
(svn cp file:///svnroot/mojavescripts/trunk file:///svnroot/mojavescripts/tags/mirrorutils_rel_0_0_1 -m "taged mirrorutils_rel_0_0_1")

另有一说,无所谓谁对谁错。
        trunk:表示开发时版本存放的目录,即在开发阶段的代码都提交到该目录上。
        branches:表示发布的版本存放的目录,即项目上线时发布的稳定版本存放在该目录中。
        tags:表示标签存放的目录。
 
        在这需要说明下分三个目录的原因,如果项目分为一期、二期、三期等,那么一期上线时的稳定版本就应该在一期完成时将代码copy到branches上,这 样二期开发的代码就对一期的代码没有影响,如新增的模块就不会部署到生产环境上。而branches上的稳定的版本就是发布到生产环境上的代码,如果用户 使用的过程中发现有bug,则只要在branches上修改该bug,修改完bug后再编译branches上最新的代码发布到生产环境即可。tags的 作用是将在branches上修改的bug的代码合并到trunk上时创建个版本标识,以后branches上修改的bug代码再合并到trunk上时就 从tags的version到branches最新的version合并到trunk,以保证前期修改的bug代码不会再合并。

需求一:
有一个客户想对产品做定制,但是我们并不想修改原有的svn中trunk的代码。
方法:
用svn建立一个新的branches,从这个branche做为一个新的起点来开发
svn copy svn://server/trunk svn://server/branches/ep -m "init ep"

Tip:
如果你的svn中以前没有branches这个的目录,只有trunk这个,你可以用
svn mkdir branches
新建个目录

需求二:
产品开发已经基本完成,并且通过很严格的测试,这时候我们就想发布给客户使用,发布我们的1.0版本
svn copy svn://server/trunk svn://server/tags/release-1.0 -m "1.0 released"
咦,这个和branches有什么区别,好像啥区别也没有?
是的,branches和tags是一样的,都是目录,只是我们不会对这个release-1.0的tag做修改了,不再提交了,如果提交那么就是 branches

需求三:
有一天,突然在trunk下的core中发现一个致命的bug,那么所有的branches一定也一样了,该怎么办?
svn -r 148:149 merge svn://server/trunk branches/ep
其中148和149是两次修改的版本号。

分享到:
评论

相关推荐

    SVN trunk, branch, tag merge 等的应用

    SVN(Subversion)是一种广泛使用的版本控制系统,它的核心概念包括trunk、branch和tag,这些都是进行协同开发和代码管理的重要元素。下面将详细解释这些概念以及它们在实际项目中的应用。 1. **Trunk**:Trunk通常...

    SVN的标准目录结构:trunk、branches、tags

    当需要建立 branch 或 tag 时,可以使用 SVN 中的 copy 操作,例如,从 trunk 中 copy 到 branches 中,或者从 trunk 中 copy 到 tags 中。 权限控制 在 SVN 中,可以使用 authz 文件控制目录的访问权限。例如,...

    4.1、SVN trunk(主线) branch(分支) tag(标记) 1

    本文将深入探讨 SVN 中的 trunk、branch 和 tag 三个核心概念,以及它们在实际开发场景中的应用。 首先,trunk(主干或主线)是项目的主要开发分支,代表了项目的最新稳定状态。新功能的开发通常在这个分支上进行,...

    SVN 主干(trunk)、分支(branch )、标记(tag)

    资源中有 SVN 主干(trunk)、分支(branch )、标记(tag) 的详细解释,和作用 并带 SVN分支与合并 的详细操作文档(附图)。 SVN分支与合并的总结 1.分支(branche)的创建。 1、分支创建是建立在主干上的。 2、创建...

    SVN版本控制方案

    通过对SVN中Trunk、Branch、Tag的概念及使用方法的介绍,我们可以更好地理解如何高效地使用SVN来进行版本控制。遵循这些约定能够有效提升团队协作效率,减少代码冲突,确保项目的稳定性和可持续发展。

    SVN中的Branches分支以及Tags标签详解与应用举例

    创建 Branch 分支或者 Tag 标签非常容易,只需要在 TortoiseSVN 中创建对应的文件夹,然后将其提交到 SVN 服务器中。例如,创建一个名为 v1.0 的分支,用于发布一个版本的文件。 Branches 分支的修改和使用 Merge ...

    SVN打基线常用命令使用介绍

    在Subversion(简称SVN)这样的版本控制系统中,打基线通常是通过创建标签(tag)或分支(branch)来实现的。这两种方式都可以用来保存项目的特定状态,但它们之间有一些细微的区别: - **标签(tag)**:通常用于...

    SVN常用功能详细说明

    在使用TortoiseSVN的过程中,图标是理解文件或目录状态的关键。不同颜色和形状的图标代表了文件的不同状态,例如: - **绿色勾**:表示文件或目录与SVN仓库中的最新版本一致。 - **黄色感叹号**:表示文件已被修改...

    SVN使用手册200809.ppt

    - 创建分支:在主线上右键选择“Branch/Tag”,设定目标URL,分支位于`branches`目录下。 - 分支工作:可以通过检出新的工作拷贝或在现有工作拷贝中切换到分支。 通过理解和熟练运用这些SVN和TortoiseSVN的基本...

    SVN 配置管理使用教程

    - SVN本身不直接支持中文目录,因此在使用过程中需要注意避免使用中文字符。 #### 八、总结 通过以上内容的学习,我们可以了解到SVN作为一种重要的版本管理工具,在软件开发过程中扮演着不可或缺的角色。无论是从...

    SVN客户端使用手册(文档)

    主要功能包括:检出(Checkout)、提交(Commit)、更新(Update)、合并(Merge)、分支(Branch)、标记(Tag)、日志查看(Log)等。 #### 二、SVN客户端软件介绍 - **TortoiseSVN**: 一款免费的、易于使用的SVN...

    SVN安装配置及使用说明

    3. **标签(Tag)**: 使用`svn copy url/to/trunk url/to/tag -m "创建标签"`创建快照,用于标记特定版本。 4. **解决冲突策略**: 对于复杂冲突,可能需要使用图形工具,如TortoiseSVN,辅助解决。 **五、SVN与其他...

    svn教程转载

    在SVN中,`trunk`、`branch`和`tag`是三个核心概念,它们各自有不同的用途: 1. **Trunk(主干)**: - Trunk是项目的主线或主分支,通常代表项目当前的开发状态。开发人员通常在这里进行日常的开发工作,每次提交...

    SVN高级使用指南

    本高级使用指南将重点介绍在模块化开发中如何有效利用SVN以及分支技术在产品化开发中的应用。 一、模块化开发中的SVN使用 在模块化开发中,公用模块/组件的版本控制至关重要。有两种主要方法: 1.1 手工维护公用...

    svn目录使用规范.doc

    1. 使用TortoiseSVN客户端工具的`Branch/Tag`功能,选择本地trunk项目,然后指定新的分支或标签路径,点击OK完成操作。 2. 在SVN服务器的对应分支或标签目录下直接创建新文件夹,然后将trunk中的稳定版本代码复制...

    使用SVN进行版本控制 使用SVN1.2

    6. **分支(Branch)**:仓库中的一个独立目录,用于实现功能隔离开发。 7. **标记(Tag)**:为特定版本的快照创建的一个只读副本。 8. **合并(Merge)**:将一个分支或修订版的内容合并到另一个分支或主干中。 #...

    svn merge简单操作

    - **创建分支**:在 `trunk` 的 `examples1` 目录中选择 “Branch/tag”,然后指定分支路径为 `branches/examples1` 并添加相应的注释信息。 ```bash # 创建分支 svn copy ...

    SVN如何建立版本分支

    在实际操作中,可以使用Eclipse集成开发环境中的SVN插件来创建分支。具体步骤如下: 1. **打开Eclipse**:启动Eclipse IDE。 2. **选择项目**:右键点击需要创建分支的项目,选择“Team”菜单下的“Branch/Tag”...

Global site tag (gtag.js) - Google Analytics