分布式版本控制(一)
虽然我使用传统SCM(软件配置管理,或者叫RCS——版本控制系统)软件已经有很多年,从那个垃圾一般的VSS到功能强大的CVS和SVN都用过 一段时间,短则半年(VSS),长则数年(SVN)。但是对于分布式版本控制系统(DRCS),我也是刚接触不久,发现它们的确很不错,相比传统SCM来 说,是一种质的变化。
所谓DRCS是相对于传统集中式的SCM而言的。对于传统SCM来说,Repository是集中在唯一的一个地方, 所有的用户进行commit或update以及其它的相关操作基本上都需要能够直接连接到这个Repository才能进行。这就会存在一些比较麻烦的问 题,就我个人的体会来说,常见的麻烦事在于(以下仅以CVS和SVN为例,至于VSS——不能为rubbish浪费时间):
1、并不是所有的开发者都总能连接到Repository服务器,比如在没有网络连接或是网络连接受限的情况——当然SVN提供的HTTP访问方式部分解决了这种困难,但仍然不够。
2、在团队协作开发中,当变更冲突增加以后,处理起来会比较麻烦。
3、分支管理方面的功能还较弱。
4、安全性问题。不论是用独立服务器方式还是HTTP方式,用户认证方式都相对简单,当然也可以配置得更安全,但比较麻烦。
5、最后一个小问题就是:不论是CVS还是SVN,都会在工作目录的每个子目录里创建一个隐藏目录记录本地状态信息,比较烦人。
而DRCS的目标就是尽可能解决传统SCM存在的不足之处——包括但不限于我上面所说的那些。就我目前试用过的两个DRCS——Bazaar和Mercurial——来说,上面的问题都解决得比较好:
1、都可以在本地提供全部的版本控制功能,可以只在必要的时候合并更新到公共Repository中。
2、因为是针对分布式开发设计,变更合并功能强大。
3、分支管理功能同样强大。
4、Bazaar支持SFTP方式的push,而Mercurial支持SSH方式的push,二者都是基于安全的通讯协议并且使用系统的用户管理机制,在保证安全性的同时保持了使用上的简单性。
5、只在工作目录的顶层生成一个隐藏目录——就是本地Repository,保持了工作目录的清爽。
显然,DRCS天生是为了开源项目而量身定制的——因为开源项目的开发者往往都是在地理上极度分散的,但又需要对源码进行有效的版本管理。但是对于其它的软件项目来说,DRCS也同样是个好东西,特别是其变更合并功能和分支管理功能。
后面我会简单介绍一下我最近试用过的两款比较流行的DRCS——Bazaar和Mercurial。
其实这两款DRCS在命令定义方面都是继承传统的,所以学习起来并没有太大的复杂性,并且具有很多的共性——二者除了程序名不一样以外,常用的命令和参数定义都几乎是完全一样的,甚至一些配置文件都是类似的。