参考博客:
http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html

(1)为什么要使用SVN分支开发和主干合并?

目的:在SVN下进行版本升级模式的开发

需求:
1、项目目前已经有比较稳定的版本(release_version_1.0),需要在稳定版本上面做程序的升级
2、升级开发时,可能有10个程序员同时在修改程序,且都需要对绝大多数文件做大部分改动
3、恶心的技术经理说:现在需要把数据库换成hbase,但是没有更改完毕之前依旧保持mysql不变
4、多人频繁提交代码引入了过多的不稳定因素
5、为不同用户客定制不同的版本 目标:
1、在开发过程中需要保证随时可以切换到指定的版本(1.0/2.0/3.0)
2、最大程度避免程序的肆意修改和较多的冲突
3、程序员间相互的修改不受影响 解决方案:在SVN下进行分支开发与主干合并

(2)SVN标准结构

url_of_repository
|-trunk
|-cnblogs
|-tags
|-cnblogs_release_version_1.0
|-cnblogs_release_version_1.2
|-cnblogs_release_version_2.0
|-branches
|-cnblogs_update_version_1.2_20151012
|-cnblogs_update_version_2.0_20151213 解读: 从目录可以看出,目前有三个版本,分别是1.0、1.2、2.0.
其中最新稳定可发布版本是2.0。 目前项目针对1.2和2.0版本在做分支升级开发,1.2版本是从1012开始进行升级,2.0版本是1213开始进行升级维护的。

(3)Trunk、Tags、Branches详细解读

① trunk[主干]

任何时候,应该保证trunk里面的代码是最新的稳定版本
当branch里面修改的代码经过多次测试成功通过后,应该把branch里面的代码合并到主干trunk里

② tags[存储阶段性的发布版本]

将某时刻认为稳定的最新版本作为一个备份保存在tags目录下,以便随时切换到该稳定节点版本
作为一个里程碑的版本进行存档
注意:tags下面的版本文件默认是只读的(可以强制修改),但还是建议不要修改tags下面的任何文件。 常常听项目经理说:
A.嗯,不错。这个版本比较稳定,给打个2.0版本极限吧。
B.有没有搞错,这个版本这么多错误还敢上线!赶紧给我回退到上一个版本! 相对应的操作是:
A.将当前trunk里的代码"复制"一份到tags下面(cnblogs_release_version_2.0),并注明这个版本的更新和修改情况
B.忽略本次发布版本(cnblogs_release_version_2.0),将系统回退到上一个经测试验证后比较稳定的版本(cnblogs_release_version_1.2)

③ branches[分支]

一个branch是某个 trunk 的一个拷贝
新建的branch在repository中其实只是一个指向trunk某个revision的软连接而已,并没有真的复制文件。 流程:从trunk创建(create)branch,然后在branch上做开发,开发完毕后合并(merge)到trunk中。 项目经理把小李子和小叶子叫过来说:
你们负责的模块都有不同程度的问题,需要修改一下。
但是我不想让你们在trunk里面直接修改,你们回头各自创建一个branch,分别修改完自己的bug再合并到trunk里面吧 1)一个重要问题:branch和trunk在并行开发的过程中如何感知对方,避免两者越走越远,导致最后无法合并?
解决这一问题的唯一手段是:branch要不停地和trunk保持同步,你要及时地知道trunk都做了什么修改,这些修改是否会影响你正在开发的新功能,如果需要,你必须及时调整branch的代码,使之能与trunk“兼容”。 2)那么如何让branch和trunk保持同步?合并,从trunk合并到branch,你没听错,是从trunk合并到branch。 关于TortoiseSVN的合并,有几点需要注意: A.TortoiseSVN的合并发生在本地,也即你的working copy中,你无需过多担心会对repository中的代码造成影响 B.不管是从trunk合并到branch还是最终从branch合并回trunk,在每次合并前最好先update,然后将本地的修改先全部commit,保护好现场,万一合并不理想随时都可以revert C.合并完成后看是否能正确编译,然后测试验证,最后将合并后的改动提交到repository

(4)Branch和Merge具体执行流程

① 创建Branch/Tag

在/trunk/MyProject目录上右键,选择“分支/标记”,在弹出框中的"ToURL"中填入分支/标记的地址,
在这里目标revision选择HEAD revision。添加log后点击ok分支/标记便建立了。

② 检出(Check Out)或者切换(Switch)到分支,在分支中做修改

③ 将trunk中的修改同步到branch

首先,保证此时trunk中的代码是最新的,没有任何冲突。(该Commit的和Update的都已经执行完毕)

"Merge a range of revision" - 将某个分支或主线上提交的多个revision间的变化合并到另外一个分支上。

当branch和trunk在独立、并行地开发时,为了防止在“错误”的道路上越走越远,branch意识到是时将trunk合并到branch了。

trunk先Update至最新代码,在/branches/MyProject上右键,选择Merge选项,选择"Merge a range of revision"。

在点击Merge按钮前你可以先Testmerge一把,看成功与否,以及merge的详细信息。

点击Merge按钮后trunk所做的修改将同步到branch中。

至此,branch已经完全和trunk同步,branch和trunk的代码相处很融洽,没有任何冲突。

④ 将branch合并回trunk

首先,需要保证此时branches中的代码是最新的,没有任何冲突。(该Commit的和Update的都已经执行完毕)

"Reintegrate a branch" - 在分支开发结束后将所有的改动合并回主线。

在/trunk/MyProject上右键,选择“Merge”,在弹出的窗口中,Merge type选择"Reintegrate a branch"

最后,需要将成功合并后的trunk赶紧commit!

⑤ 删除branch

如果你认为你新加的功能已经开发完成了,你可以删除你的分支。

[svn] 分支开发的更多相关文章

  1. svn分支开发与主干合并(branch & merge)

    下面我将step by step地演示如何一次完整的branching和merging,包括创建分支.分支开发.分支和主线同步,分支合并到主线的全过程,甚至包括如何在本地创建一个测试用的reposit ...

  2. svn分支开发注意事项

    1.切换的时候最好查看本文件的是主干上的还是分支上的, 单击右键,点击属性,可以看到以下图片,其中"URL"就可以 看到是主干还是分支 2.切换到分支 点击切换后就选择要切换到的路 ...

  3. SVN多分支开发模式V1.0.1

    1目的 规范开发模式过程,指导项目研发.质控测试.DevOps的相关活动. 2适用范围 本规范的作用范围是为互联网软件产品相关项目开发模式的管理过程. (1)   对项目团队中研发人员在开发模式过程中 ...

  4. SVN分支管理策略个人见解

    本篇目录 前言 SVN分支管理策略 VisualSVN Server TortoiseSVN客户端 Repository的创建 Check out trunk创建新项目MyProject trunk更 ...

  5. SVN分支研究

    在结合之前总结的定制开发的产品版本开发问题解决的方法:http://www.cnblogs.com/EasonJim/p/5971906.html,今天来研究以下用SVN处理这类的问题. 研究SVN分 ...

  6. (转)SVN分支/合并原理及最佳实践

    先说说什么是branch.按照Subversion的说法,一个branch是某个development line(通常是主线也即trunk)的一个拷贝,见下图: branch存在的意义在于,在不干扰t ...

  7. eclipse中SVN分支合并到主干

    在项目开发中,需要添加一些新的功能,但是又不想影响到其他开发人员的项目进度,所以决定使用SVN分支进行开发,分支开发完毕后再合并到主干.本文介绍如何在eclipse中合并分支到主干. 1. 要想将分支 ...

  8. 详细说明svn分支与合并---命令行

    一,svn分支与合并有什么用? 作程序的,对svn在熟悉不过了,但对svn分支熟悉的,我想并不多.因为一般情况下,是用不着svn分支的,其实也没有那个必要.下面我例举几个需要用到svn分支的情况: 1 ...

  9. SVN 分支及合并的介绍和实践---命令行

    写在前面 一些相关的概念和原理 进行分支开发的最佳实践 合并的分类 在 Eclipse 中进行合并操作 相关资源 写在前面 本文是由演讲整理而来的,介绍了 SVN 分支与合并的概念.流程和一些实际操作 ...

随机推荐

  1. UVA 10453 十七 Make Palindrome

    Make Palindrome Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit St ...

  2. 2012 #5 History repeat itself

    History repeat itself Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  3. jenkins远程命令执行利用工具

    昨天看小飞侠写的py的jenkins的脚本,昨天晚上在微信里评论今天写一个JAVA的GUI的tools. 早上花了点时间写一下: code: package com.tools; import jav ...

  4. [SAP ABAP开发技术总结]选择屏幕——SELECT-OPTIONS

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. Javascript 简单学习

    一直就崇拜JS如此牛叉的来操作Html标签, 抽出时间来学习学习,哈哈. Js是Netscape公司语言, 基于对象和事件驱动. 与Java不同之处: 1:所属公司不同 2:js是基于对象,java是 ...

  6. MongoDB入门教程之C#驱动操作实例

    实体类: using MongoDB.Bson; namespace WindowsFormsApp { class User { //public ObjectId _id; //BsonType. ...

  7. [转] Git SSH Key 生成步骤

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  8. Visual Studio 2012 RC 中RC表示什么意思

    来自:http://zhidao.baidu.com/question/507233956.html Release Candidate 缩写为 RC ,经常用于计算机软件方面,表示软件的候选发布版. ...

  9. show slave status

    Slave_IO_State: Waiting for master to send event                   Master_Host: 10.1.1.1             ...

  10. Struts1 标签库 说明

    Struts提供了五个标签库,即:HTML.Bean.Logic.Template和Nested. HTML标签 : 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单 ...