`
talentluke
  • 浏览: 592149 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SVN的分支/标记/合并

 
阅读更多

 

首先说下为什么我们需要用到分支-合并。比如项目demo下有两个小组,svn下有一个trunk版。由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作【某个模块】,小组2进行新需求的开发。那么此时,我们就可以为小组2建立一个分支,分支其实就是trunk版【主干线】的一个copy版,不过分支也是具有版本控制功能的,而且是和主干线相互独立的,当然,到最后我们可以通过【合并】功能,将分支合并到trunk上来,从而最后合并为一个项目。

注意(本人意见,仅供参考):

1对于项目开发最简单就是一个个版本保留,比如主干project一开始开发到版本1,那么就创建一个副本projectV1作为备份,再创建一个projectV2用于继开发.

2 projectV2开发到版本2了那么就并入project,然后开一个新的分支project3用于继续开发。

3如果在开发过程主干版本V1同时也进行了修改,并入V2的时候就会有许多合并的冲突,一定要有计划,别到时候手忙脚乱。

 

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分支机制和开发规范

    二、 SVN分支简介 1、SVN仓库目录结构Repository 2、 结合eclipse创建分支 3、 结合eclipse创建标记tags 三、 合并主干和分支 1、 主干合并分支 2、 分支合并主干 3、 合并发生冲突 情况1:标记冲突,稍后处理。 ...

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

    并带 SVN分支与合并 的详细操作文档(附图)。 SVN分支与合并的总结 1.分支(branche)的创建。 1、分支创建是建立在主干上的。 2、创建分支前将整个porject_name检出到本地,然后主干(trunk) 。 3、右键 选择 ...

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

    目录如下: 一、下载和安装 二、配置和使用方法【服务器端】 ...四、测试主干和分支合并 1、测试号1 2、测试号2 3、测试号3 4、测试号4 五、发布稳定版本到tags 六、实际开发和发布约定 七、友情提示 八、参考

    TortoiseSVN日常操作指南

    1 概述 4 2 安装 4 ...4 日常操作 7 4.1 检出文件(Checkout) 7 4.2 提交文件(Commit) 9 4.3 添加文件(Add) 10 4.4 修改文件 12 4.5 删除文件(delete) 13 4.6 恢复文件(Revert) 15 ...4.17 分支/标记 32

    AnkhSvn操作手册

    17 4.4.2 签入一个新项 18 4.5 获得和释放锁18 4.5.1 锁定一个项19 4.5.2 释放锁19 4.6 修改取消20 4.7 回滚一个项到特定的版本 20 4.8 查找什么人对其中的一行进行了修改 21 4.9 分支、标记和合并22 4.9.1 创建一个...

    Git权威指南PDF完整版

    16.2 合并一:自动合并/ 212 16.2.1 修改不同的文件/ 212 16.2.2 修改相同文件的不同区域/ 214 16.2.3 同时更改文件名和文件内容/ 215 16.3 合并二:逻辑冲突/ 217 16.4 合并三:冲突解决/ 218 16.4.1 手工编辑完成...

    SVN操作手册中文版网页格式

    4.19.1. 创建一个分支或标记 4.19.2. 检出或者切换 4.20. 正在合并 4.20.1. 合并指定版本范围 4.20.2. 复兴分支 4.20.3. 合并两个不同的目录树 4.20.4. 合并选项 4.20.5. 预览合并结果 4.20.6. 合并跟踪 ...

    TortoiseSVN和TortoiseMerge的中文帮助文档(chm格式)

    4.19.2. 创建分支或标记的其他方法 4.19.3. 检出或者切换 4.20. 合并 4.20.1. 合并指定版本范围 4.20.2. 复兴分支 4.20.3. 合并两个不同的目录树 4.20.4. 合并选项 4.20.5. 预览合并结果 4.20.6. 合并跟踪 4.20.7. ...

    SVN客户端用户使用手册

    当需要把soc_1_branc分支文件合并到soc_1主干文件时,右键单击soc_1,选择Merge,会弹出一个窗口,如图9。 图9 在From输入框中填入主干的URL,在To输入框中填入分支的URL。在From和To中,都有两个选项HEAD ...

    使用Subversion进行版本控制(针对 Subversion 1.4)

    合并分支到另一分支 取消修改 找回删除的项目 常用分支模式 发布分支 特性分支 使用分支 标签 建立简单标签 建立复杂标签 分支维护 版本库布局 数据的生命周期 供方分支 常规的供方分支管理过程 svn_load_dirs.pl ...

    subversion-TortoiseSVN-使用手册(CHM+HTML,中英完整版)

    5.16.1. 创建一个分支或标记 5.16.2. 检出或者切换 5.17. 正在合并 5.17.1. 合并指定版本范围 5.17.2. 合并两个不同的目录树 5.17.3. 预览合并结果 5.17.4. 忽略祖先 5.18. 锁 5.18.1. 锁定在Subverion中是如何工作...

    开源GitHub权威介绍GotGitHub.zip

    因分支 gh-pages 的提交历史可能会周期性删除或压缩合并,为避免执行 git pull 更新分支时造成困惑,请对本地版本库进行如下设置。 $ git config --add remote.origin.fetch refs/heads/gh-pages:refs/heads/...

    SVN服务器VS2005客户端part2

    通过 Elliotte 的介绍,您可看到如何在 Eclipse 中配置 Subversion 支持(通过 Subclipse 插件)、检出一个项目、与您的存储库同步,随后执行一些常用的操作,如合并、修补、比较和删除。 版本控制之于程序员,就...

    SVN服务器与VS2005客户端par1

    通过 Elliotte 的介绍,您可看到如何在 Eclipse 中配置 Subversion 支持(通过 Subclipse 插件)、检出一个项目、与您的存储库同步,随后执行一些常用的操作,如合并、修补、比较和删除。 版本控制之于程序员,就...

    subversion-merge-conflict-resolver:Subversion树冲突解决程序

    因此,通过在合并修订的主干工作副本中搜索该文件并更新已移动文件的分支副本,可以轻松实现该方法。 并将冲突标记为已解决。 TreeConflictResolverUsingSvnKit 它尚未完成,正在开发中! 它执行与...

    gitt:战it中的Git

    分析VCS需求初始化仓库,添加文件,删除文件,提交,重置记录,比较,标记,查看历史数据分支,合并,删除分支,恢复分支,处理冲突GUI用法藏匿,克隆网络,基础修补,平分,过滤器分支,子树,模块下班后版本控制...

    TortoiseSVN中文手册

    2.2.3. 复制-修改-合并 方案 ........................................... 6 2.2.4. Subversion 怎么做? ........................................... 8 2.3. Subversion 实战 ....................................

    GIT中文资源

    3.2 基本的分支与合并 . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.2.1 基本分支 . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.2.2 基本合并 . . . . . . . . . . . . . . . . . . . ....

Global site tag (gtag.js) - Google Analytics