技术开发 频道

版本控制工具:“和谐”项目开发的保证


    孰优孰劣?

    现在又回到“开源软件 VS.商业软件”的老话题上了。先来看下CVS的基本工作模式:

    CVS在服务器端维护代码文档库,不同的开发者在本地机器上建立对应代码树,并利用CVS保持本地代码文档同代码文档库的一致。当由于多个开发者对文件的同时修改造成本地与库中的代码文件冲突时,CVS报告并协助解决冲突代码的合并问题。普通开发者(非管理员)对CVS的使用流程如下所示:

    Check out命令只需在开始建立本地代码树时使用一次,其后更新本地代码则使用update命令。update命令比较服务器和本地代码库的区别,并把本地代码树中过时的文件自动更新。当完成对代码的修改之后,在提交代码之前同样需要使用update命令,以获取他人并行修改的的代码。如果出现冲突(即对同一文件同时进行了修改),CVS将在本地代码中把两者都保留并标记出来,要求开发者处理冲突。在冲突不存在或已解决的情况下,使用commit命令将服务器代码更新为本地代码。CVS要求为更改提供注释,并自动为更新的文件处理版本编号。当软件需要正式发布时,使用export命令导出不包含CVS设置信息的源代码树。 

    即使不用拿CVS的升级版SVN,就算是拿没有目录版本控制功能的 CVS 来和商业的版本控制工具相比,我们也有充足的选择开源版本控制工具的理由:

 服务器端是否和客户端一样看起来很美?
 
    有一些商业软件的服务器端简直就像是一个垃圾场,用流水号命名的文件名,一个目录下动辄成千上万个文件。CVS以文件为核心,即面向文件的管理方式,项目文件可以方便地组合和移植

 服务器端是否在使用数据库来作版本控制的数据引擎?

为    了支持目录的版本控制工具,大多数商业软件选择了一个最为简单和直接的解决方案——数据库,用数据库将文件名和版本库对应。但是引入数据库,服务器的稳定性、可维护性大大下降,成为管理员的噩梦。增量备份计划难以实现,不知道什么时候会出现数据库崩溃。

 是否支持到其他版本控制系统的迁移? 

    对于商业软件,这个答案是否定的。如果允许将版本库导出到其他版本控制系统,简直就是将自己好不容易积累的客户拱手相让。

 可否定制?是否可以对提交说明(Commit Log)进行检查?可否每一次的提交事件能够收到邮件通知? 

    CVS 的 CVSROOT 脚本扩展,以及 SVN 的 Hooks 钩子脚本,可以让用户充分发挥想像的空间。而商业版本控制工具,有此功能的寥寥。

 客户端是如何状态保持的? 

    熟悉 CVS 和 SVN 的用户应该知道工作目录下的 CVS 和 .svn 隐含目录的作用,就是用于记录版本控制状态信息的。而很多商业软件并没有这个机制,而是靠服务器端来维护此记录:哪台主机、检出哪个版本的代码、存储到哪个目录。这么做的一个弊病就是工作目录不能自由在硬盘中移动,系统重装导致的状态丢失。

 成本因素 

    一是软件采购成本。商业软件版本控制工具动辄十几万美金,而且是和用户数目挂钩的。 

    二是学习成本。商业软件版本控制工具的部署范围非常有限,不能保证新员工一定熟悉该系统,但是如果选择开源的版本控制工具,那么员工的培训费,可能就可以省下了。

 客户确认软件中没有木马、间谍软件么? 

    客户肯定不会去购买你竞争对手开发的版本控制工具,那么您为什么还会相信其他闭源的版本控制工具呢? 

    小结 

    再优秀的版本控制工具都是软件项目开发中的一部份,况且,一个项目的完成并不只只涉及版本控制工具,还包括其他的一些工具。一个软件项目的开发成功需要涉及工具的使用,开发人员资源的管理等因素。但是,选择一款优秀的、适合开发团队和项目需求的版本控制工具能够提高开发工作效率和代码的优质性。对于版本控制工具的选择,秉持的一个原则是:“不选贵的,只选对的。”

0
相关文章