SVN分支研究
在结合之前总结的定制开发的产品版本开发问题解决的方法: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分支研究的更多相关文章
- eclipse svn 分支合并到主干
最近公司产品上线,整个系统架构包含有七八个子系统,并且子系统都是集群部署.所以每次升级维护都要确保尽可能不出问题.因为整个系统刚上线不久,意味着新系统不定期有BUG需修复,但新功能模块也在持续的开发中 ...
- 实例讲解SVN分支和合并问题(转)
本节向大家简单描述一下SVN分支和合并方面的知识,在学习SVN的过程中SVN分支和合并时经常遇到的问题,在这里和大家分享一下,希望本文对大家有用. 关于主线同SVN分支合并的概念及如何使用的误区此问题 ...
- 使用svn分支
使用svn分支 原文: https://my.oschina.net/cobish/blog/652984
- SVN分支管理策略个人见解
本篇目录 前言 SVN分支管理策略 VisualSVN Server TortoiseSVN客户端 Repository的创建 Check out trunk创建新项目MyProject trunk更 ...
- [svn] 分支开发
参考博客: http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html (1)为什么要使用SVN分支开发和主干合并? 目的:在SVN下 ...
- eclipse中SVN分支合并到主干
在项目开发中,需要添加一些新的功能,但是又不想影响到其他开发人员的项目进度,所以决定使用SVN分支进行开发,分支开发完毕后再合并到主干.本文介绍如何在eclipse中合并分支到主干. 1. 要想将分支 ...
- svn 分支
网上的SVN分支的教程真的不好用,我这里自己写的,绝对靠谱: SVN的分支跟GIT的分支不一样,SVN的分支,包括文件夹的分支或者是文件的分支,都是重复复制文件的,步骤如下: 1.branch/tag ...
- 详细说明svn分支与合并---命令行
一,svn分支与合并有什么用? 作程序的,对svn在熟悉不过了,但对svn分支熟悉的,我想并不多.因为一般情况下,是用不着svn分支的,其实也没有那个必要.下面我例举几个需要用到svn分支的情况: 1 ...
- SVN 分支及合并的介绍和实践---命令行
写在前面 一些相关的概念和原理 进行分支开发的最佳实践 合并的分类 在 Eclipse 中进行合并操作 相关资源 写在前面 本文是由演讲整理而来的,介绍了 SVN 分支与合并的概念.流程和一些实际操作 ...
随机推荐
- Dynamics CRM 2016 的新特性
新版本CRM (2016 with update 0.1) 发布已有几个月了,总结一下新特性,从几个方面来看: 1. 针对整合功能的新特性 (1) 增加了CRM App for Outlook. 这个 ...
- Power of Two
Given an integer, write a function to determine if it is a power of two. bool isPowerOfTwo(int n) { ...
- 学习C++.Primer.Plus 7 函数
C++的返回值类型不能是数组 函数原型中的变量名相当于点位符,因此不要求提供变量名. void cheers(int); C++中不指定参数列表时就使用活力号: void saybye(...); 通 ...
- Tomcat 内存溢出对应解决方式
1.Tomcat内存溢出的原因 生产环境中Tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三 ...
- web 前端常用组件【01】Pagination 分页
分页组件几乎是一般网站都会涉及到的组件,网上有很多这样的插件,自己挑来跳去选择了这一款. 官方Demo网址:http://mricle.com/JqueryPagination 功能强大,可扩展性比较 ...
- cocos2dx-2.2.1 免 Cygwin 环境搭建(Win8+VS2013+ADT Bundle+android-ndk-r9c)
1.下载 ADT Bundle 解压到D盘 D:\adt-bundle-windows-x86_64-20131030: 2.下载 NDK-R9C,解压到 ADT 目录下:D:\adt-bundle- ...
- 单元测试中Assert类的用法
Assert类所在的命名空间为Microsoft.VisualStudio.TestTools.UnitTesting 在工程文件中只要引用Microsoft.VisualStudio.Quality ...
- [BZOJ1924][Sdoi2010]所托门王的宝藏(缩点+DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1924 分析: 首先把传送门作为点建图 这个数据很弱的,没有那种卡你的. 把每行的情况存 ...
- nodejs实现的简单接口
var http = require('http'); var mysql = require('mysql'); var connection = mysql.createConnection({ ...
- iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样
// 上传多张图片 - (void)send { // 设置初始记录量为0 self.count = 0; self.upcount = 0; // 设置初始值为NO self.isUploadPic ...