`
ttwang
  • 浏览: 331902 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

SVN 中trunk tag branch 的理解

阅读更多

http://hi.baidu.com/baihebeijixing/blog/item/71e2e97b957fb9f52f73b385.html

 

   在实现上,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的trunk、branch、tag以及merge机制对于软件开发团队来说至关重要,它们是实现高效协同开发、保持代码整洁有序的基础。同时,使用像"admintools"这样的辅助工具可以进一步提升SVN的管理...

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

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

    SVN版本控制方案

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

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

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

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

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

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

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

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

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

    SVN 配置管理使用教程

    - Linux下通过命令`svn mkdir trunk/branch/tag`来创建目录结构。 ##### 导入文件 - 可以使用`svn import`命令将本地文件导入到SVN仓库中。 ##### 文件操作 - 使用`svn checkout(co)`和`svn export`命令进行文件检...

    svn merge简单操作

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

    SVN目录结构说明

    此项目除了标准的trunk、branch和tag之外,还额外划分了一些子目录来存放特定的模块或框架,这有助于更细致地管理和维护代码。 3. **RomleyBMC项目** - **/RomleyBMC** - trunk:存放当前稳定的源码。 - branch...

    SVN中文教程.pdf

    当开发任务完成,用户需要提交(Commit)更改到版本库,并且可以创建分支(Branch)和标签(Tag)来管理不同的版本和发布。 以上是根据给定文件中的标题、描述、标签和部分内容提炼的SVN和TortoiseSVN相关的知识点...

    SVN Client.zip

    5. **分支(Branch)**:在SVN中,分支允许你从主干(Trunk)创建一个独立的开发线,这样可以进行风险较高的开发而不会影响主线。 6. **合并(Merge)**:分支完成后,你需要将分支上的更改合并回主干,以便所有...

    SVN如何建立版本分支

    #### 一、理解SVN中的版本控制结构 在Subversion (SVN) 中,为了有效地管理项目的开发流程和版本控制,通常会在项目版本库中建立以下三个主要的目录: 1. **Trunk**:作为项目的主干分支,所有的日常开发活动都在...

    SVN主干和分支操作

    - 在弹出的“Copy (Branch/Tag)”对话框中,设置目标 URL 为分支路径(如`svn://localhost/project/branches`),点击“OK”。 4. **切换工作副本到分支**: - 右键点击项目,选择“Team” -> “Switch to ...

    SVN安装和深入理解分支和模拟实践

    三、trunk(主线) branch(分支) tag(标记)  1、SVN仓库目录结构Repository 2、trunk(主干|主线) branchs(分支) tags(标记)作用 3、SVN具体操作步骤 3.1、TortoiseSVN创建仓库 3.2结合eclipse上传项目 四、测试主干和...

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

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

    svn 做成milestone

    #### 二、理解 SVN 中的 Tag 和 Release 在 SVN 中,**Tag** 和 **Release** 实际上是指对某一特定版本的标记,它们通常用于标识某个重要时刻或版本。例如,当项目达到了一个重要的阶段时(如完成了一个主要功能的...

Global site tag (gtag.js) - Google Analytics