1、版本库管理方案概述
多人团队式项目开发中,版本管理的重要性和必要性已不必多言,现在大家都已适应了版本控制的开发模式,若哪个项目没有版本管理,相信很多开发人员都会心生惶恐,不太适应了。
这里要讲述的版本管理方案对项目中的开发人员没有任何影响,他们还是会使用先前的版本控制开发模式进行项目的开发。这里要讲述的是项目的管理人员或者准确的说是公司的项目管理人员如何进行项目的版本“库”管理。当然开发人员了解并熟悉版本库的管理方案,对开发工作的版本控制也是很有好处的。
实际的项目开发中,大体有如下三种版本库管理方案:分散式、集中式、分布集中式。
A、分散式版本库管理方案
分散式版本库管理是指项目的版本库由项目自行管理,与其它项目的版本库没有任何关系,各项目的版本库形成一个个离散的孤岛。而通常项目是本地化开发,因此项目的版本库都存放在各个项目地。
这种版本库管理方案的好处是各项目地开发人员对版本库的管理有任意的控制权,这也意味着有极大的灵活性。但毫无疑问,这种版本库管理方案给公司的集中管理、规范化管理带来了很大的麻烦。事实上也加重了各项目组版本管理的负担。
B、集中式版本库管理方案
集中式版本库管理方案的指版本库集中统一管理,各项目不需考虑版本库的存储、权限控制、库结构规划等问题。简言之,各项目组基本不需考虑版本库的管理问题,版本库的管理全部交由公司统一专人管理与控制。
这种版本管理方案对公司层面要求较高,要求公司有规范的版本制度、有专业的版本管理人员,甚至还要求公司有专业的服务器设备及管理手段。
集中式版本库管理方案对网络有严重依赖。当项目地的网络出现问题时,项目的正常开发工作将受到极大影响。另外,如果网络速度较慢,也会影响项目的日常开发工作。
C、分布式集中版本库管理方案
介绍了上面的两种方案,相信聪明的读者已经明白了第三种方案所要解决的问题。是的,分布式集中版本库管理方案正是融合了”分散式管理库”和“集中式版本库”的长处,同时又避免了他们的短处。
具体来说,这种方案要求在公司建立集中的版本库,同时在项目地也建立项目版本库,通过版本库的自动同步工具保持项目地的版本库与集中版本库的自动同步。项目地开发人员日常开发访问的都是本地版本库,这样就避免了对网络的依赖,同时解决了网速慢的问题。
通常集中式版本库有严格的权限控制,同时对服务器也良好的备份管理。而各项目的版本库通常没有太多的访问权限控制;因为能自动同步,项目版本库也不要求有完善的备份机制。
当然相对于第一种方案来讲,这种方案增加了项目地版本库管理的难度,因为除了要管理本地库外,还需要管理和维护本地库与集中版本库的同步。幸运的是,现在有了SVK工具,极大降低了版本库间的同步工作难度。也正是因为有了这样的工具,“分布式集中版本库管理方案”才真正变得切实可行。
2、分布式集中库管理本管理方案实践
这里介绍的实践方案是采用基于SVK+Subversion的方案,即项目的版本库使用和公司的集中版本库都使用Subversion来管理,两个版本库之间的同步使用SVK来实现。若项目版本库和集中版本库使用CVS,按SVK的文档介绍来看,应该也是可行的,但本人未实际使用,不敢保证其可行性。
首先介绍一下前面提到的SVK,也是本方案的核心工具,SVK是基于Subversion实现的分布式版本控制系统,通常使用SVK实现开发人员对集中式版本库的分布式和离线式访问。其典型的用法请参考SVK的官方文档,这里不详述。要特别提出的是,虽然SVK是基于Subversion实现的,但它并不要求集中版本库也是Subversion,实际上SVK是支持多种非Subversion的版本库的。
下面介绍这种方案的具体配置步骤:
A、建立集中版本库
集中版本库的建立与一般的版本库建立步骤是一样的,这里特别提醒应该注意如下几点:
* 严格的访问权限控制:可以使用SVN的访问控制机制实现;
* 用户身份验证:可以使用用户密码加数字证书的双因素认证机制,保障版本库不被非法访问,证书管理可以使用Windows Server的内建CA来实现。
* 应该有UPS保障版本服务器的不间断访问;
* 应该有完善的版本库备份机制,集中版本库应用越广,备份越重要;
* 应该提前规划好版本库的目录结构,否则后续要更改库结构会相当麻烦;
* 使用Subversion + Apache时可通过PHP实现用户密码的修改;
* 使用Subversion时可使用其hook机制实现提交时强制写日志的功能;
B、配置SVK
SVK在本方案中的作用有两点:一是用于自动进行项目地版本库与集中版本库间的同步;二是充当项目地版本库供项目日常开发使用。具体配置如下:
* 下载并安装SVK:在ubuntu环境下直接使用新立得管理工具进行SVK的安装;其它linux环境下的安装可以参考SVK官方网站的说明;Windows环境的安装需要下载SVK的相应版本并安装,但据网上的说法,SVK的Windows版本安装配置比较复杂,而且容易出问题,因此建议在Linux环境下安装SVK;
* 建立SVK版本库(SVK的术语是depot):执行如下命令创建SVK版本库,库路径默认在当前用户目录下的.svk/local目录中;
svk depot
* 建立本地库与集中库的映射关系:执行如下命令后将在本地库路径//remote/cscb2与集中版本库的cscb的主干间建立映射关系;
svk mirror https://www.subverson.com/cscb/trunk2/trunk //remote/cscb2
* 建立本地版本库:上面的命令创建的//remote/cscb2库仅用于保持本地库与集中库间的映射关系,不应该被被项目日常开发所直接访问。使用如下命令创建的本地库才是项目日常开发所访问的版本库:
svk cp //remote/cscb2 //local/cscb2
* 禁止映射库的对外访问:映射库//remote/cscb2必须禁止外部访问,否则可能破坏映射关系,导致无法进行本地库与集中库间的同步。若使用http协议访问本地库则参考svn的apache配置禁用指定路径的对外访问权限,若使用svn协议访问本地库,则可修改~/.svk/local/conf/authz文件,配置路径访问权限,参考内容如下:
[/local]
* = rw
[/remote]
* =
* 首次同步:通常集中版本库是先建立的,因此需要将集中版本库中的内容同步到本地版本库中。如果集中版本库中的版本数不多,可以采用第一条命令将集中版本库中的所有版本全部同步到本地;如果集中版本库中的版本过多,又不想在本地版本中保存过多的历史版本,则可以采用第二条命令仅同步集中版本库中指定版本开始的所有版本;
svk sync //remote/cscb2 -- 同步所有历史版本
svk sync -s 3145 //remote/cscb2 -- 同步集中版本库中3145以来的所有版本
* 同步本地版本库:上面的命令只是将集中库中的版本同步到了本地的映射库//remote/cscb2中,此时//local/cscb2中还没有任何版本,必须再使用如下命令将映射库内容同步到本地库中:
svk pull //local/cscb2
* 至此项目组即可通过如下路径访问本地库:
svn://162.16.1.22/local/cscb2
* 上述配置完成后,项目组即可在本地库中进行日常开发,但如何进行本地库的同步呢?也就是如何将集中库中的版本及时下载到本地,而本地中的修改版本又如何上传到集中库中呢?这里就要感谢SVK了,他提供了如下命令完成前述操作:
svk sync //remote/cscb2 -- 同步集中库与本地映射库
svk pull //local/cscb2 -- 将映射库中版本下载到本地库中
svk push //local/cscb2 -- 将本地库中版本上传到映射库并同步到集中库中
* 为了让同步自动进行,我们可将上述命令编写到一个脚本文件中,并设定定时任务以自动执行,需要注意的是,在linux环境下自动执行上述命令时,同步到集中库的commit日志log可能出现乱码,这时需要在crontab中指定LANG=zh_CN.UTF-8以设定字符集
3、结束语
分布式集中版本管理方案为我们提供了介于离散版本库管理和集中版本库管理之间的折衷方案,在现阶段是具体较高可行性与可操作性的一种方案,值得我们偿试使用。但是由SVK还是一个非常不成熟的产品,实际使用中肯定还是会遇到各种各样的问题,这就需要各项目自已解决与取舍了。
分享到:
相关推荐
不过,有一些工具如SVK,是基于Subversion构建的分布式版本控制系统,它允许开发者在没有网络连接的情况下进行工作,并且可以与现有的CVS仓库兼容。 Subversion的系统架构包括客户端和服务器两部分。客户端通常用于...
外加热强制循环蒸发器装配图(CAD).rar
数控车床纵向进给系统设计.zip
j
爬虫 bangumi名称和评论数
基于SpringBoot的垃圾分类回收系统,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 首页:浏览垃圾分类回收系统信息。 个人中心:管理个人信息,查看历史记录和订单状态。 运输管理:查看运输信息,垃圾回收的时间和地点。 公告管理:阅读系统发布的相关通知和公告。 垃圾回收管理:查看垃圾回收的信息,回收类型和进度。 垃圾出库申请管理:提交和查看垃圾出库申请的状态。 【管理员功能】 首页:查看垃圾分类回收系统。 个人中心:管理个人信息。 管理员管理:审核和管理注册管理员用户的信息。 用户管理:审核和管理注册用户的信息。 运输管理:监管和管理系统中的运输信息。 公告管理:发布、编辑和删除系统的通知和公告。 垃圾回收管理:监管和管理垃圾回收的信息。 垃圾出库申请管理:审批和管理用户提交的垃圾出库申请。 基础数据管理:管理系统的基础数据,运输类型、公告类型和垃圾回收类型。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBoot 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上都可以 开发工具:IDEA、Ecplise、Myecplise都可以 数据库: MySQL5.7以上都可以 Maven:任意版本都可以
内容概要:本文档是台湾大学计算机科学与信息工程系2021年秋季学期《算法设计与分析》课程的第一次作业(Homework#1)。作业包含四道编程题和三道手写题,旨在考察学生对算法设计和分析的理解与应用能力。编程题涉及汉诺塔、数组计算、矩形点对、糖果分配等问题;手写题涵盖渐近符号证明、递归方程求解、幽灵腿游戏优化、不公平的卢卡斯问题等。文档详细描述了每个问题的具体要求、输入输出格式、测试用例以及评分标准。此外,还提供了编程技巧和注意事项,如避免延迟提交、正确引用资料、处理大输入文件等。 适合人群:具备一定编程基础的本科生或研究生,特别是修读过或正在修读算法设计与分析相关课程的学生。 使用场景及目标:①帮助学生巩固课堂所学的算法理论知识;②通过实际编程练习提高解决复杂问题的能力;③为后续更深入的学习和研究打下坚实的基础。 其他说明:此作业强调团队合作和个人独立思考相结合的重要性,鼓励学生在讨论后用自己的语言表达解决方案,并注明参考资料。对于编程题,特别提醒学生注意输入文件可能较大,建议采取适当的优化措施以确保程序运行效率。
基于SpringBoot的铁路订票管理系统,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 首页:浏览铁路订票管理系统的主要信息。 火车信息:查看火车的相关信息,包括车次、出发地、目的地和票价等。 公告资讯:阅读系统发布的相关通知和资讯。 后台管理:进行系统首页、个人中心、车票预订管理、车票退票管理等操作。 个人中心:管理个人信息,查看订单历史记录等。 【管理员功能】 首页:查看铁路订票管理系统。 个人中心:修改密码、管理个人信息。 用户管理:审核和管理注册用户的信息。 火车类型管理:管理系统中的火车类型信息。 火车信息管理:监管和管理系统中的火车信息,添加、编辑、删除等。 车票预订管理:处理用户的车票预订请求。 车票退票管理:处理用户的车票退票请求。 系统管理:管理系统的基本设置,公告资讯、关于我们、系统简介和轮播图管理。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBoot 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上都可以 开发工具:IDEA、Ecplise、Myecplise都可以 数据库: MySQL5.7以上都可以 Maven:任意版本都可以
塑料架注射模具设计.rar
基于json文件数据驱动的的接口测试框架
铁丝缠绕包装机设计-缠绕盘设计.rar
linux
圆柱体相贯线焊接专机工作台设计.rar
硬币分拣机设计.rar
内容概要:本文探讨了开发行业级机器学习和数据挖掘软件的经验与教训,指出当前研究界与工业界之间的脱节问题。作者分享了开发LIBSVM和LIBLINEAR的经验,强调了用户需求的重要性。大多数用户并非机器学习专家,期望简单易用的工具来获得良好结果。文章还详细介绍了支持向量机(SVM)的实际应用案例,包括数据预处理(如特征缩放)、参数选择等步骤,并提出了为初学者设计的简易流程。此外,作者讨论了在设计机器学习软件时应考虑的功能选择、选项数量、性能优化与数值稳定性等问题,强调了软件开发与实验代码的区别以及鼓励研究人员参与高质量软件开发的重要性。 适合人群:对机器学习软件开发感兴趣的科研人员、工程师及从业者,尤其是那些希望了解如何将学术研究成果转化为实际可用工具的人士。 使用场景及目标:①帮助非机器学习专家的用户更好地理解和使用机器学习方法;②指导开发者在设计机器学习软件时考虑用户需求、功能选择、性能优化等方面的问题;③促进学术界与工业界之间的合作,推动高质量机器学习软件的发展。 其他说明:本文不仅提供了具体的开发经验和技巧,还呼吁建立激励机制,鼓励更多研究人员投入到机器学习软件的开发中,以解决当前存在的研究与应用脱节的问题。
一天入门pandas代码
该资源为joblib-0.12.0-py2.py3-none-any.whl,欢迎下载使用哦!
内容概要:本文档《xtuner_requirements.txt》列出了用于支持特定项目(可能是机器学习或深度学习项目)运行所需的所有Python包及其版本。其中不仅包括常见的数据处理和科学计算库如numpy、pandas,还包括了与深度学习密切相关的库如torch、transformers等。值得注意的是,文档中还特别指定了NVIDIA CUDA相关组件的具体版本,确保了GPU加速环境的一致性和兼容性。此外,文档中也包含了从GitHub直接安装的xtuner库,明确了具体的提交哈希值,保证了代码来源的精确性。 适合人群:对机器学习、深度学习领域有一定了解并需要搭建相应开发环境的研发人员,尤其是那些希望复现特定实验结果或基于已有模型进行二次开发的研究者和技术爱好者。 使用场景及目标:①帮助开发者快速搭建完整的开发环境,确保所有依赖项正确无误;②为研究人员提供一个稳定的实验平台,以便于重复实验和验证结果;③作为项目协作的基础,确保团队成员之间的环境一致性,减少因环境差异带来的问题。 阅读建议:由于该文档主要为技术性依赖列表,在阅读时应重点关注所需安装的库及其版本号,特别是CUDA相关组件和自定义库(如xtuner)的安装方式。对于非技术人员而言,可能需要额外查阅相关资料来理解各库的作用。同时,在实际操作过程中,建议按照文档中的顺序逐一安装依赖,避免版本冲突等问题的发生。
j