基于SVK的分布式集中版本库管理
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
svk mirror https://www.subverson.com/cscb/trunk2/trunk //remote/cscb2
svk cp //remote/cscb2 //local/cscb2
[/local]* = rw[/remote]* =
svk sync //remote/cscb2 -- 同步所有历史版本svk sync -s 3145 //remote/cscb2 -- 同步集中版本库中3145以来的所有版本
svk pull //local/cscb2
svn://162.16.1.22/local/cscb2
svk sync //remote/cscb2 -- 同步集中库与本地映射库svk pull //local/cscb2 -- 将映射库中版本下载到本地库中svk push //local/cscb2 -- 将本地库中版本上传到映射库并同步到集中库中