参考博客:
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. 【leetcode❤python】326. Power of Three

    #-*- coding: UTF-8 -*- class Solution(object):    def isPowerOfThree(self, n):        if n<=0:    ...

  2. ubuntu su 密码

    Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码. Ubuntu刚安装后,不能在terminal中运行su命令,因为root没有默认密码,需要手动设定.以安装ubuntu时输 ...

  3. heredoc 和 nowdoc

    heredoc 和 nowdoc     多次使用 php nowdoc HereDoc 插入大量Hmtl都没有成功,一样提示语法有问题,事实上PHP手册注明是这样写的,实在很奇怪 最后发现了问题所在 ...

  4. Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法

    文件是在WIndows 下创建的,Windows 的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码.文件 ...

  5. 青岛理工大学第五届ACM交流赛 部分题解

    A:后缀维护si*pi的最小值,查询的时候二分,判断后缀和当前两个部分就行. #include <bits/stdc++.h> using namespace std; typedef l ...

  6. SQL语句like子句中的转义符

    如果想在SQL LIKE里查询有下划线'_'或是'%'等值的记录,直接写成like 'XXX_XX',则会把'_'当成是like的通配符.SQL里提供了 escape子句来处理这种情况,escape可 ...

  7. SAP传输系统TMS、开发类、传输请求

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

  8. 期权交易基本原理——买进看跌期权(Long Put),卖出看跌期权(Short Put)

    期权交易基本原理--买进看跌期权(Long Put),卖出看跌期权(Short Put) 来源:中电投先融期货-青岛 浏览:13508次2014-07-25 14:25:55 3 第三节 买进看跌期权 ...

  9. java SE (java Standard Edition)

    14.10.22 学习java SE的Object: -------------------------------------15.11.18----

  10. css 常用样式命名规则

    大家在写css的时候,对一些html标签起一个合适的名字是个很头疼的事情,现在给大家分享项目中常用的名字供参考. 外套:wrap  ——用于最外层 头部:header  ——用于头部 主要内容:mai ...