Subversion实践案例——客户现场模式的分布式开发_开发去客户现场的案例-程序员宅基地

技术标签: 扩展  脚本  subversion  工具  svn  Subversion实践案例  配置管理  

基本信息

用户单位:某应用软件研发企业
用户规模:100人以上
组织过程水平:中等
CMMI评审等级:无
Subversion使用时间:1年

客户需求

由于公司每次向新客户提交软件的时候都需要派出一个小规模的团队到客户现场进行一段时间的软件定制和维护。此外,老客户系统的重大升级和功能扩展也需要一个小团队在客户现场进行一段时间的开发。因此,异地开发的配置管理就是一个比较突出的问题了。

虽然SVN本身提供了通过Http协议进行远程访问的能力,但出于安全的考虑,作为存有公司核心资产(源代码)的配置库在物理上和外部公共网络是相隔离的,所以必须采用分布式的管理模式。相关的具体需求可以归纳为:

1、需要从主配置库中分离部分内容创建用于在异地开发的远程配置库
2、远程配置库的访问权限能够直接从主配置库中直接获取
3、可以对远程配置库进行单独的授权控制和管理
4、当派出团队回到公司总部时需要对两个配置库的内容进行同步
5、派出团队在异地时也需要用非在线的方式(如邮件、即时通信工具、FTP等)对两个配置库进行数据的同步。

问题解析

    Subversion作为一种集中式管理的版本管理系统,本身并不支持分布式的开发管理,所以需要一些额外的技术手段。目前唯一支持SVN的分布式版本管理系统是SVK——一款基于脚本实现的开源软件。但该软件除了在使用上较为繁琐外,并不能满足用户对访问控制及离线同步等方面的要求。
    同时,根据分布式开发模式的特点,适合采用“远程代码线”的分支结构模式。因此,最为可行的解决方案应该是在“远程代码线”的模式的基础上通过技术上的一定扩展从而实现用户的所有相关需求。

我们的解决方案

我们所提供的解决方案如下图所示:

分布式开发

    首先,在主版本库中采用远程代码线的分支结构模式,并通过远程代码线创建客户现场所使用的远程版本库,然后通过在线和离线两种方式进行数据的同步。 
    在这种操作模式下,为了保证数据的完整性和一致性,我们采用了若干技术手段提供了如下的约束机制:
    a、主版本库中的远程代码线在下一次同步操作前一直处于冻结状态,不允许进行任何检入操作。
    b、远程版本库中的主代码线、主版本库中的远程代码线以及主版本库中的主代码线三者的同步必须按照一定的顺序完成一个周期(如上图所示)
   另外,通过建立远程开发团队的相关信息,在创建远程版本库的时候,将继承主版本库的团队成员相关的访问控制权限,并提供对远程版本库的访问控制进行单独定义的机制。

参见:SmartChange分布式开发管理模块

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Microke/article/details/4329673

智能推荐

springboot配置文件加载顺序, java启动参数优先级_nacos默认覆盖本地吗-程序员宅基地

文章浏览阅读1k次。(12)、jar包外面的 Profile-specific application properties (application- {profile} .properties和YAML)(13)、jar包内的 Profile-specific application properties (application-{profile}.properties和YAML)(1)、在您的HOME目录设置的Devtools全局属性(~/.spring-boot-devtools.properties)。_nacos默认覆盖本地吗

适合写技术文档的工具_技术文档编写工具-程序员宅基地

文章浏览阅读3.6k次。https://www.showdoc.com.cn/_技术文档编写工具

面向食品领域的命名实体识别技术-程序员宅基地

文章浏览阅读706次,点赞17次,收藏24次。非常感谢您的详细任务描述和要求。作为一位世界级人工智能专家和计算机领域大师,我将以专业的技术语言和深入的见解,为您撰写这篇《面向食品领域的命名实体识别技术》的技术博客文章。面向食品领域的命名实体识别技术作者:禅与计算机程序设计艺术1. 背景介绍食品行业是一

android音乐播放器;activity生命周期;模拟器用快照(snapshot)没声音;win7要用管理员身份运行adt,才能打开模拟器sdcard;_activity snapshot方案-程序员宅基地

文章浏览阅读1.8k次。onCreat到onDestroy是整个activity生命周期(界面生成代码放在oncreate,放其他循环占内存);onStart到onStop是所有在显示界面的周期(onRestart完成循环,例如:返回列表信息时应该更新内容);onResume到onPause一次显示在界面的周期;播放歌曲时,进度条要动,而且下面的值也变化,所以用多线程,照完照片存sd卡然后添加到头像,布局xml写_activity snapshot方案

html鼠标循环滚动代码大全,jQuery 列表自动循环滚动鼠标悬停时停止滚动的实现代码(图文)...-程序员宅基地

文章浏览阅读418次。要求实现:页面中一个小的区域循环滚动展示新闻(公告、活动、图片等等),并且,鼠标悬停时停止滚动并提示,离开后,继续滚动。演示效果图:1,html页面代码示例:2,css代码代码示例:ui,li {list-style: none;}#news{height: 75px;overflow: hidden;}3,关键部分---js文件:$(function() {var $this = $("#new..._html实现向上无缝滚动列表,鼠标悬浮时暂停,鼠标离开时继续滚动

python编程手机软件哪个好,用手机编程python的软件_打开代码的软件-程序员宅基地

文章浏览阅读888次,点赞23次,收藏17次。大家好,小编来为大家解答以下问题,python编程手机软件哪个好,用手机编程python的软件,现在让我们一起来看看吧!_打开代码的软件

随便推点

不同层级的Android开发者的不同行为,我们该如何进阶和规划?-程序员宅基地

文章浏览阅读874次,点赞11次,收藏14次。首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶注解原理丶注解原理丶序列化Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)代码框架结构优化(数据结构丶排序算法丶设计模式)APP性能优化(用户体验优化丶适配丶代码调优)热修复丶热升级丶Hook技术丶IOC架构设计。

Pelee: A real-time object detection system on mobile devices-程序员宅基地

文章浏览阅读237次。Pelee: A real-time object detection system on mobile devices属于densenet的变种文章,没有使用可分离卷积,因为可分离卷积不同的框架实现方法不一样。Before first dense blockDynamic Number of channels in Bottleneck layerThe nu..._a real-time object detection system on mobile devices

Hadoop环境搭建(保姆级教学)_hadoop平台搭建步骤-程序员宅基地

文章浏览阅读5.4k次,点赞10次,收藏64次。HADOOP环境搭建过程详解_hadoop平台搭建步骤

ZooKeeper实战之ZkClient客户端实现负载均衡_zookeeper实现负载均衡案例-程序员宅基地

文章浏览阅读1.9k次。声明:此博客为学习笔记,学习自极客学院ZooKeeper相关视频;非常感谢众多大牛们的知识分享。相关概念:负载均衡(相关节点)架构图:说明:每当往集群中新增一个工作服务器时,都会再/server节点下创建一个对应的临时节点,该节点中应含有该服务器 的连接信息以及均衡标识等。当客户端需要连接worker server时,就会先读取/servers节点下的所..._zookeeper实现负载均衡案例

Android 枚举 VS 枚举注解_android 枚举注解-程序员宅基地

文章浏览阅读448次。枚举注解替换枚举java 虚拟机内存分配java 内存区域可分为方法区 存放虚拟机加载的类信息,常量,静态变量等数据。虚拟机栈 java 方法执行的内存模型:每个方法在执行的时候创建的栈帧,包括存储局部变量表,操作数栈,动态链接,方法出口等信息。本地方法栈 主要与Native相关堆 存放对象实例。程序计数器 当前线程执行的字节码行号指示器。java 数据类型占内存大小java 数据类型分为基本数据类型和引用数据类型。在32位系统上基本数据类型,本文中中的所有内存空间大小都在_android 枚举注解

HDU1715--第i个斐波那契数 大菲波数_返回第i个斐波那契数-程序员宅基地

文章浏览阅读486次。HDU1715:大菲波数求第i个斐波那契数问题(与HDU1316类似,但更简单):总结:数组开多大?题目中让求的最大的是第1000个斐波那契数是多少,由于f[0]不用,所以数组开到1001。import java.util.Scanner;import java.math.BigInteger;public class Main { public static void main..._返回第i个斐波那契数