SVN多项目并行版本管理解决方案
1、背景
随着公司业务拓展,各业务部门频繁的需求变更,导致系统集成冲突的问题日益突出。
2、现状
基于SVN版本管理模式,多分支版本并行,分支合并主干交付。多分支开发存在依赖关系且有交付的先后顺序, 导致了合并主干冲突。
3、解决方案
业务版本号(4位主干版本号)与SVN版本号的映射关系
+
主干版本号与分支版本号的映射关系
3.1名词解释:
3.1.1业务版本号:提测版本号,即当前的主干版本号,由四位数字组成,如: DUPFJ V1.0.1.1 。
3.1.2 SVN版本号:SVN每次提交操作后自动生成且末位数字+1
3.1.3主干版本号:主干版本号(即业务版本号)与SVN版本号的映射关系
3.1.4分支版本号:不限制,分支可有可无,分支数量无要求
3.1.5 SVN实现方式
实现方式:
①拉分支记录主干当前业务版本号(同最后一轮转测版本号)
②合主干记录提测主干版本(这里说的版本号统一是业务版本号,业务版
本号映射svn版本)
③回滚版本,根据源码交付操作记录获取当时主干版本号进行回滚版本
3.2解决方案
存在的问题:
1、 主干回滚频率高;
2、 技术能力(SVN操作、冲突解决的能力)
3、 项目编排(先后顺序、依赖关系)
以上三个问题,均归属于技术风险。
问题1解决方案:SVN合并主干规范化。通过规范SVN合主干描述中的业务版本号,确保频繁回滚主干的规范性。
问题2解决方案:通过持续交付系统实现对SVN的自动化操作。
根据持续交付系统的SVN操作记录,实现多项目并行交付。
持续交付系统会记录SVN上每次的操作记录(log信息),记录项目、主干版本号、分支版本号和归档版本号的映射关系。
合并主干时:
待提测主干版本号末位-1是否与映射关系记录中当前主干版本号一致;
1、 一致:直接合并主干;
2、 不一致:
1)主干版本号末位-1在映射关系记录中有记录,但并不是当前主干版本号时
实现方式:先回滚再合并主干
①先回滚至主干版本号末位-1的主干版本;
②再合并主干;
示例:待测主干版本号2.0.2.4,末位-1为2.0.2.3,在映射关系记录中有记录,但并不是当前主干版本号
①先回滚至2.0.2.3
②回滚成功后再合并主干
2)主干版本号末位-1在映射关系记录中没有记录时
实现方式:先回滚再合并主干
①主干版本号前三位为分支版本号,通过分支版本号找到与最初主干版本号的映射关系(即第一个分支与主干版本号的映射关系),先回滚至该主干版本;
②再合并主干;
示例:待测主干版本号2.0.2.1,末位-1为2.0.2.0,在映射关系记录中没有记录
①主干版本号2.0.2.1,由此可以确定分支版本号为2.0.2,分支版本号可以确定该分支与最初主干版本号2.0.1.3存在映射关系。先回滚至最初主干版本号2.0.1.3。
②回滚成功后再合并主干;
问题3解决方案:通过项目上线的优先级解决。优先级高的项目优先编排,优先合主干。
4 总结
技术风险是可控的风险,可以通过持续交付系统规避或降低,将技术风险控制在可控的低风险范围。
业务风险不可控,业务风险不可预测且随着对业务覆盖率的要求和业务节点的增加,将会导致,风险越来越大,这种业务风险是不可控制的。
业务覆盖:由于节点增多,测试疲劳导致业务覆盖率降低
业务节点:交付节点由一个变成了两个,交付节点出现问题的概率就会增加。
技术风险比业务风险低且可控。
综合分析,方案一更合适。
SVN多项目并行版本管理解决方案的更多相关文章
- IntelliJ IDEA项目断开版本管理解决方案
今天使用idea时打开项目突然发现项目不受svn管理(项目目录依然受svn管理,只是idea脱管了),如遇到可用以下方法: 图片示例: 1. 2. 希望能帮到你
- 使用SVN进行项目版本管理
1.摘要 本文描述了利用SVN进行项目版本管理的方法,涉及项目版本号命名规则.SVN目录结构.第三方代码库的管理.版本创建.发布.修订.合并等行为的方法和原则. 2.版本号命名规则 版本号采用主版本号 ...
- [.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下)
[.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下) 本篇导读: 接上篇继续介绍SVN的高级功能,即使用分支并行开发.随着需求的不断变更,新功能的增加.特别是 ...
- svn导入项目和部署方面的相关问题
前一阵子忙于部署项目的事情,在这个过程之中遇到了一些问题,查阅了相关资料解决了问题于是就决定分享给大家,可能会对大家有一定的帮助.我在下面中可能会提到dubbo的一些问题,dubbo是用于分布式的系统 ...
- 用好Git 和 SVN,轻松驾驭版本管理
用好Git 和 SVN,轻松驾驭版本管理 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,并总结平时工作高频率使用到的 Git 常用命令. 一.Git vs S ...
- vs出现“已经在解决方案中打开了具有该名称的项目”问题的解决方案
经过本人测试,这种问题一般出现在装了svn的项目. 其实删除了删除sln和csproj文件中的SVN配置信息就行了 需要删除的信息 sln文件中: GlobalSection(SubversionSc ...
- ZendStudio 解决svn导出项目乱码问题
从svn导出项目往往会出现乱码,可以右击项目,点击properties(或者选中项目alt+enter键进入)直接修改项目编码为utf-8,但是html文件还是乱码. 下面的方法可以解决: windo ...
- Linux - SVN下载项目
SVN下载项目 本文地址:http://blog.csdn.net/caroline_wendy 使用SVN.在Git上下载项目. $ mkdir chunyu_trunk //创建目录 $ ls / ...
- svn部署项目
svn部署项目 在svn服务器上文件夹拷入项目文件~然后直接检出文件夹~即可
随机推荐
- AI for VS ,美团创新之处分析
微软在2017中发布了VS Tools for AI,旨在提升用户对于深度学习的需求体验.AI组件可以让我们迅速构建和训练深度学习的Project,其功能主要有开发,调试和部署深度学习和人工智能的解决 ...
- 1.SpringMVC入门
创建一个web工程 导入jar 配置web.xml 在web.xml配置前端控制器:DispatcherServlet <?xml version="1.0" encodin ...
- DWARF 中的 Debug Info 格式
本周花了几天的时间来研究怎么在 breakpad [1, 2] 中加入打印函数参数的功能,以期其产生的 callstack 更具可读性,方便定位崩溃原因. 现代 ELF 中的调试信息基本是以 DWAR ...
- 关于javac和java
1.为什么安装完jdk后不配置环境变量就能直接运行java,而不能运行javac 在安装jdk的时候jdk会自带一个jre(java运行环境),还会单独安装一个jre,默认路径是和jdk在同级目录,而 ...
- web API简介(四):客户端储存之IndexedDB API
概述 前篇:web API简介(三):客户端储存之Web Storage API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. Index ...
- [CocoaPods]制作CocoaPod
创建自己的CocoaPod非常简单.如果你已经有一个单独的组件,那么你就是最重要的.本指南概述了整个过程,本节中的其他指南更适合更高级用户. 我们建议让CocoaPods在这里努力工作.Running ...
- [Swift]LaunchScreen.storyboard如何跳转到到Main.storyboard
在加载App时,首先读取[LaunchScreen.storyboard]中的内容, 在App加载到内存之后,自动读取[Main.storyboard]中的初始视图控制器, 用于替换原来的[Launc ...
- kafka shutdown停止关闭很慢问题的解决方案
kafka shutdown停止很慢问题 在数据量大的时候,consumer一次抓取数据的数据很多,进入到业务处理的数据可能有很多, 假设一次poll有1万条数据进入业务程序,而且业务程序是和poll ...
- django model数据 时间格式
from datetime import datetime dt = datetime.now() print '时间:(%Y-%m-%d %H:%M:%S %f): ' , dt.strftime( ...
- Java基础 - 线程(一)
一.什么是线程 首先,介绍一下线程.进程的概念. 进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元.进程是指运行中的应用程序,Windows任务管理器进程窗口看到的每一项都是一个进程.每 ...