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

研究SVN分支合并的问题,只要用到trunk(主干)/branches(分支)/tags(标签),参考:http://www.cnblogs.com/EasonJim/p/6103807.html

场景:

1、假设公司有一套电商产品,每个季度会发布一个版本,功能和底层上都是往上递增的。

2、那么问题来了,我们每个季度在发布每个新版本的同时,我们的销售也会不断的推广,可能在其中的一个版本就已经卖出去了。

3、由于客户更新版本的速度会没有那么快,毕竟是关乎钱的问题,可能会间隔几个版本之后才会选择更新一个版本,出这个版本钱去购买。

4、在第一次购买的电商产品的时候,里面就有属于自己的定制业务需求开发的功能,那么在购买最新的版本时候,必须包含最新的功能的同时也要包含自己以前定制开发的需求。

5、当在某个客户上开发的特定需求时,发觉这个特定需求也是属于我们产品需要的时候,那么会合并到我们的电商产品中,在下一个版本的发布上会带上这个功能。

基于以上场景,那么对于我们进行开发的时候,基于SVN的分支是最合适的。

分为以下版本:

主干(truns)版本A(不断的开发新功能,合并分支提交的bug)

分支(branches)版本A_1(其中发布的第A_1个用于销售的版本,并不断的在这个版本上进行开发修复bug,提交到主干,最后会发布第A_1、A_1.1、A_1.2...个版本到下面标签(tags)上)

标签(tags)版本A_1(其中发布的第A_1个用于销售的版本)

分支版本A_1_1(从tags或者branches上分支出来的A_1版本,客户1购买第A_1个版本,包含了自己的定制需求1)

分支版本A_1_2(从tags或者branches上分支出来的A_1版本,客户2购买第A_1个版本,包含了自己的定制需求2)

测试:

1、主干(truns)上的项目可以合并下面任何一个子分支的修改,包括子分支的子分支的修改。

1.1、子分支可以合并下面任何一个子分支的子分支的修改。

2、子分支的子分支的子分支可以合并子分支的修改。

3、子分支可以合并子分支的子分支的子分支的修改。

4、子分支(包括子分支的子分支...)可以合并主干(truns)的修改

所以,在SVN上分支出来的任何版本都可以来回合并。

总结:

那么应对上面的场景,我们对SVN可以这样控制:

1、大致版本控制和正常产品流程,参考:http://www.cnblogs.com/EasonJim/p/6103807.html

2、当客户定制的功能符合产品的功能需要时,那么会提到最新的主干(truns)上,不会是合并到分支(branches)。

2.1、也可以这样处理,先从分支(branches)中分支出一个版本,然后这个功能合并到分支出来的版本中,再发布到标签(tags)中,那么以后就是维护这个版本了。

2.1.1、对于上面这种做法的场景就是,当主干已经从大版本1升级到了大版本2,那么只有分支(branches)是维护大版本1的,采用上面这样的方式就是最合适的。

3、当客户从版本1升级到版本3时,那么这个客户先合并版本3的分支(branches)的文件,最终形成客户定制的版本3。

3.1、另一种是直接签出版本3的分支(branches)的文件,然后再合并客户定制的版本1的定制功能,最终形成客户定制的版本3。

4、分支(branches)上的版本有修改的bug时,可以一同发布到标签(tags)上。

4.1、分支(branches)永远都只是修改bug,不允许新功能的开发。新功能全部交由主干(truns)进行。且修复的bug需要及时提交到主干。除非这个bug在主干(truns)上的功能已经砍掉了,那就不用提交。

5、分支(branches)修复了一个bug的同时,发布到标签(tags)的同时,可以在针对相应的版本发布到分支(branches)上,也可不用,因为销售出去的产品用于都是最新的版本的(不可能直接销售时拿这个版本以前有bug的进行销售吧,所以肯定是最新没bug的版本才对)。

6、其实还有一个特别的需求,比如,分支(branches)上的某个V1版本需要增加功能(短信验证),而这个功能是在主干的最新V2版本上有加入,但是迫于用户只愿意给这个短信的钱,不愿意给V2升级版的钱。且这个短信验证的功能在V1这个版本也确实需要的时候。

6.1、第一种解决,针对这个用户定制开发。不考虑合并到分支(branches)上。

6.2、第二中解决,打破上面第4点,然后在分支(branches)V1版本直接合并主干(truns)的短信验证功能进来,再发布一个增加短信功能的V1版本到标签(tags)上。注意,这里版本号上的功能增加+1。

6.3、第三中解决,打破上面第4点,然后在分支(branches)V1版本上开发短信验证的功能,然后客户定制的V1版本上合并分支(branches)V1版本的短信功能。

总结2:

有了SVN的代码控制,那么再针对版本号进行命名进行规范:http://www.cnblogs.com/EasonJim/p/6105893.html

SVN分支研究的更多相关文章

  1. eclipse svn 分支合并到主干

    最近公司产品上线,整个系统架构包含有七八个子系统,并且子系统都是集群部署.所以每次升级维护都要确保尽可能不出问题.因为整个系统刚上线不久,意味着新系统不定期有BUG需修复,但新功能模块也在持续的开发中 ...

  2. 实例讲解SVN分支和合并问题(转)

    本节向大家简单描述一下SVN分支和合并方面的知识,在学习SVN的过程中SVN分支和合并时经常遇到的问题,在这里和大家分享一下,希望本文对大家有用. 关于主线同SVN分支合并的概念及如何使用的误区此问题 ...

  3. 使用svn分支

    使用svn分支 原文: https://my.oschina.net/cobish/blog/652984

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

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

  5. [svn] 分支开发

    参考博客: http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html (1)为什么要使用SVN分支开发和主干合并? 目的:在SVN下 ...

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

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

  7. svn 分支

    网上的SVN分支的教程真的不好用,我这里自己写的,绝对靠谱: SVN的分支跟GIT的分支不一样,SVN的分支,包括文件夹的分支或者是文件的分支,都是重复复制文件的,步骤如下: 1.branch/tag ...

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

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

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

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

随机推荐

  1. switch2osm使用open street map离线地图中文乱码方框解决办法

    ----------written by shenwenkai------------- ubuntu linux环境下,按照网址(https://switch2osm.org/serving-til ...

  2. Xcode里-ObjC, -all_load, -force_load

    最近在做一个项目的时候,需要使用到一个第三方库,这个库的使用向导里面特别说明,在添加完该库后,需要在Xcode的Build Settings下Other Linker Flags里面加入-ObjC标志 ...

  3. NOI2018准备 Day8

    清北学堂入学测试,6道题凑了363分,平均466才能达到省选班的程度,差距不小. 今天突然感觉最大的BOSS是搜索,虽然每次都写崩...... 3个小时写了一道DP没写出来 但我不会忘记,我的首个目标 ...

  4. 2014-2015-2 《Java程序设计》课程学生博客列表

    20135101 曹钰晶 20135103 王海宁 20135104 刘 帅 20135105 王雪铖 20135109 高艺桐 20135111 李光豫 20135114 王朝宪 20135116 ...

  5. 工作随笔——pre-commit钩子限制日志长度和提交的文件类型

    2014-09-18:解决Subversion edge 的hook中文乱码问题 近期检查SVN时发现备份好的文件体积异常庞大.才跑2个月备份出来的大小就有4G多.仔细查询发现很多很多IDE自动生成的 ...

  6. JQuery 图片略缩与弹出预览 jqthumb fancybox

    弹出框插件-FANCYBOXhttp://www.jq22.com/jquery-info28 jqthumb.js缩略图插件 http://www.ijquery.cn/?p=798

  7. ASP.NET 页面缓存

    ASP.NET 实现页面缓存页面缓存的使用方法非常的简单,只需要在aspx页的顶部加一句声明<%@ OutputCache Duration="60" VaryByParam ...

  8. LXC的介绍

    LXC又名Linux container,是一种虚拟化的解决方案,这种是内核级的虚拟化.(主流的解决方案Xen ,KVM, LXC) 介绍 通过namespace进行资源的隔离,Gust1下的进程与G ...

  9. PHP mail()函数

    <?php /* PHP mail()函数 参数 描述 to 必需.规定 email 接收者. subject 必需.规定 email 的主题.注释:该参数不能包含任何新行字符. message ...

  10. mysql 索引2

    /* 所有MySQL列类型可以被索引.根据存储引擎定义每个表的最大索引数和最大索引长度. 所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节.大多数存储引擎有更高的限制. 索引的存储类型 ...