一鳞半甲

醉心、探索与收获
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在Windows环境下选择开源分布式源代码版本管理系统

Posted on 2008-10-03 01:18  麦满屯  阅读(6668)  评论(13编辑  收藏  举报

1. 分布式源代码管理系统介绍

源代码管理系统最传统的是CVS。这是我最早接触的开源源代码管理系统。前当初每当看到自己的程序提交到CVS中,从CVSWEB上看到自己的源代码版本不断的变的更新,就总有一种莫名的感动。CVS的使用,对我的团队成员之间协作带来的极大的方便。随后进入我的视野的是Subversion。可爱的小乌龟与Windows资源管理器紧密的结合,让一致通过Windows操作远端Linux服务器的我感觉十分的方便。Subversion与Apache服务器的良好结合,也让在团队内部架设服务器变得简单快速。随着时间的推移,更多的开源SCM工具进入了我的视野。我开始了解到在CVS、Subversion这样的SCM工具是集中式的源代码版本管理系统。而随着开源社区的发展,分布式源代码版本管理工具也让我眼前一亮。而这其中就有Git、HG、Bazaar等。在这篇随笔中,我主要集中讨论在Windows环境中对开源分布式源代码版本管理系统的选择。而不涉及是选择集中式SCM工具与分布式SCM工具的对比分析。

2. 分布式源代码版本管理系统选择

这次讨论,纳入版本管理工具选择的包括:Git、Mercury、Bazaar。如果还有其它的开源版本管理工具,也请大家不吝赐教。 Git是用于Linux内核开发的版本控制工具。与常用的版本控制工具CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。

Git的速度很快,这对于诸如Linux kernel这样的大项目来说自然很重要。Git最为出色的是它的合并跟踪(merge tracing)能力。Git的官方网站在:http://git.or.cz/

Mercury,官方网站在http://www.selenic.com/mercurial/wiki/。目前开源编辑工作中著名的NetBean已经将自己的源代码库从CVS上迁移到了Mercury上。并写了一篇关于为什么要从CVS迁移到Mercury的说明(http://wiki.netbeans.org/HgMigrationReasons)。

Bazaar,官方网站在http://bazaar-vcs.org/。是一个使用 Python 写成以GPL方式授权的软件代码管理工具。目前在某些Linux发行包中已经集成了Bazaar。

3. 我对Git的初次尝试

我第一次看到Git,事实上就是在08年9月的20日。当时,我正在网上随意的溜达着。CHIP.CN Dowload中看到了一篇文章:《2008年度最佳开源软件大奖》吸引的我的注意。这是Git第一次走进我的视野。带着好奇,我从Git的老家下载了Git的Windows版本:msysgit。安装的过程一切顺利。按照网站上给出的使用快速教程,git给我了一种“丝一般顺滑”的感觉。由于Git基于Linux,继承而来的Linux命令行的操作感觉甚至让我回到了当年(想当初,我还是一个Unix下的程序员啊)。不过当我开始试验中文的时候,问题出现了。首先是在msysGit的命令行窗口中无法显示中文文件名。虽然经过调整,中文文件名显示出来了,但是一旦退出中文目录,则无法再次进入了——在msysgit的命令行窗口中竟然无法输入中文。看的出msysgit的命令行是cygwin的某个亲戚:按照cygwin显示中文的方式配置,可以成功,但是按照cygwin的方式配置中文输入法,就失败了。不能输入中文,这对于我来说实在是很严重的一个问题。

在Git的主站上,cygwin成为了首选推荐的。考虑到cygwin出现已经有了相当的时间,cygwin总应该能够满足中文输入日志的要求了吧。在下载了安装程序后,cygwin安装选项首先就给了我一个下马威。在众多的安装项目中,要找到git还真不是意见容易的事情啊(cygwin默认情况下是不安装git的)。一番辛苦的查找后,终于将具有git功能的cygwin安装到了系统中。然而,这次出现的问题是在书写日志的时候,默认使用的编辑器是大名鼎鼎的VIM。没想到VIM在cygwin的默认安装中,居然是不支持中文双字节的。看到按下一个“退格键”后,我输入的测试文字变成了乱字符,心情没来由的差了不少——想来要在cygwin中使用支持中文的VIM,少不了还需要自己进行编译、设置啊。离开Linux这么多年了,VIM的基础也都就着饭吃下去了不少,现在用起来没有了得心应手的感觉。没想到在Windows环境中使用Git是如此的困难。

看看Git的Windows端的扩展应用,目前还凤毛麟角。看来Git对Windows有偏见也确有其事啊!不过,想想Git主要的应用场景和人群,对Windows支持不好、对中文支持差似乎也有了那么一些情有可原。目前唯一不知道的就是在Linux环境下,git的中文支持是不是还是有这么大的问题呢?哪位大侠有试验过,给个建议吧。

4. 从Git到Mercury

Git使用不成功,在听从了强大的Google的建议后,我的目光落到了Mercury上。Mercury现在是Mozilla等开源项目使用的版本管理工具。那么Mercury有什么成功之处呢?Mercury是使用Python开发的。其主站就是一个Wiki页面。在主站上就有Windows的支持版本。由于我的主要工作环境就在Windows下,因此对于Windows的原生支持对我来说是十分具有吸引力的一条。那么为什么要选择Mercury呢?

Mercury提供了一系列独有的特性使其成为了源代码版本控制系统的优秀选择:

  • 简单易学、易于使用

  • 轻量级,运行快速

  • 可扩展性,易于根据用户需求自行定义、扩展

如果使用者对版本管理有一定的了解的话,使用Mercury可说是手到擒来的事情。同时,由于Mercury使用Python语言编写,因此用户可以根据自己的需要灵活的编写自己所需要的插件,提高Mercury的可用性和便捷性。同时,Mercury目前已经有了相当多的扩展插件可供选择。由于Mercury基于命令行使用,因此Mercury可以轻松的成为各种自动化工具的一部分,实现对源代码管理的自动处理。

那么要Git与Mercury都是分布式源代码管理软件,两者有什么不同的地方呢?在Mercury的网站上,给出了与Git的比较,大大简化了对两者进行分析比较的难度。

以下内容来自Mercury手册:

Git提供了非常大的命令集。在1.5.0版本中,就提供了139个独立的指令。这在某种程度上提高了Git的学习难度。和Git相比,Mercury则重点强调易用性。在执行性能方面,Git的运行速度非常的快,尤其是在Linux平台上时。但是在Windows平台上,运行效率就要比不上Mercury了。(不过,我自己在Windows中运行时并没有特别明显的感觉。可能还需要进一步使用大数据量进行测试才有结果吧。)同时,在使用过程中,Git需要频繁的使用维护指令(repack),以保证源代码库的干净和有效。同样,Git使用C编写而成。而很多配套的脚本使用Perl开发,这对于保证代码质量有不利之处。此外,Mercury提供了将Git版本库中的历史记录导入的工具。

从我个人的使用感觉来看,Mercury在使用过程中,可以调用Windows的Notepad等外部程序撰写提交日志等内容。同时不需要使用Cygwin等Linux在Windows上的Port来做运行环境。因此,整体上来说,感觉与Windows结合比较紧密。同时,使用过程中叶 比较符合Windows的操作习惯。

Mercury提供了TortoiseHg的支持。与TortoiseSVN相同,是一个与Windows的资源管理器想结合的工具。提供了访问Mercury版本库的能力。进一步降低了Windows用户使用的难度。在刚刚过去的9月中,Mercury网站上推出了与Eclipse相集成的插件。由于与本文不直接相关,这里不再对Eclipse的Mercury插件进行说明。有兴趣的朋友可以自己下载下来试用。

5. 默默无名的Bazaar

与大名鼎鼎的Git、有Mozilla捧场的Mercury相比,Bazaar显得默默无名。然而观察它的网站,却显得比Git和Mercury制作更加精良。同时,Bazaar目前已经开发到1.7版本。不知道出于什么原因,Bazaar在提供Windows上的安装版本的同时,同意向用户提供了Cygwin的版本。从我的角度看来,就没有Mercury那么有优势了。然而,Bazaar使用Python开发完成,因此与Mercury一样提供了插件系统。目前已经有相当的插件可以使用了。在这个方面,Bazaar貌似比Mercury可用性更好

另外,Bazaar强调对开发流程的支持。在Bazaar的手册中,提到了Bazaar所支持的不同开发合作模式,包括:单人开发模式、双人开发模式、集中源代码管理的开发模式、分布式源代码管理的开发模式,同时对团队合作中,角色分配也使用了不同的开发合作模式来进行描述。因此,从这个角度来说,Bazaar是有其优越性的。

目前Bazaar并没有说明自己明显优于Mercury的特性。

6. 小结

以上简单介绍了三个不同的分布式源代码管理系统。当然,如果仅凭借上面的信息就说哪个源代码管理系统是最好的还是过于冒失了。但是在Windows环境中,Mercury和Bazaar还是值得尝试的。对于对合作开发流程感兴趣的朋友,同样可以参考Bazaar的开发模型。那应该是一个有益的参考。