本来是发在公司内刊上的,现在拿来这里凑个数。

前一段时间,公司讨论统一配置管理工具时,我推荐了svn(subversion)。照理说,在公司已经使用了vss、cvs和ClearCase三种工具的情况下,再提一种基本没人用过的新工具不是什么明智的选择。但我确实觉得svn的优点很突出,值得一荐。下面我就对svn进行一下简单介绍,让各位同事对其有一个初步的了解。

1. 与其他工具的对比

vss是我用的最多的配置工具,所以我相信每个用过vss的人都会对它的离线操作功能头疼不已。虽然它允许在与服务器断开的情况下修改文件,但重新连接后必须非常小心的处理每个文件,一旦出错,就会造成不小的麻烦。svn则没有这个问题。二者更详细的区别我会在下一节说明,这里就不多啰嗦了。

svn相对cvs是有明显优势的,因为svn的设计目标之一就是“一个更好的cvs”。而且,从众多开源项目的反映看,它也确实达到了这个目标:06年,最大的开源网站SourceForge开始支持svn;KDE和GNOME的开发团队也已经换用svn;如果大家多注意一下的话,还会发现更多著名的开源项目使用了svn。

ClearCase我没有实际使用过,按说应该无权评价。不过,我没有用过它的原因是因为它太难用了,曾经学过几天,但后来觉得太过复杂,就转向vss了。相比之下,svn是比较简单的,我大概花了一两天的时间就可以完成基本操作了,用的比较熟练也不过两周。另外就是ClearCase要钱,而svn是免费的。

下表是这几种工具的对比,列出的功能都是我比较关心的。更详细的比较,大家可以看看http://better-scm.berlios.de/comparison/

项目 Vss Clearcase Cvs svn
文件/目录的重命名或移动 是?
原子提交
变更集 可间接实现
中文支持 未知
visual studio集成
eclipse集成 未知 未知
http访问 8.0支持
离线操作 未知
权限管理 较差
易用性 简单 复杂 较简单 较简单
授权 商业 商业 GPL Apache/BSD

2. svn能解决哪些问题

一直以来,XXXX项目都是使用vss作为配置管理工具的,但应用过程中我也越来越感觉到vss满足不了项目的需要,所以决定在项目组内试用svn,并在合适的时机完全转换到svn。具体说来,svn可以解决以下几个(包括但不限于😄 )问题。

2.1. 获取某个以前的版本

我想获得三天前签入的某个版本怎么办?在vss中,如果没有打标签,那可能就只有一个文件一个文件的去找了。规定每次签入都打个标签或许是个解决办法,不过这项规定能否很好的执行就是另一个问题了。在svn中,每次签入(准确地说应该是“提交”)都会为整个代码库生成一个确定的版本,所以能够轻松完成此任务。

2.2. 自动递增版本号

XXXX发布后,现场经常会反馈回来一些问题。但我发现这些问题中有不少是由于程序版本不匹配或没有用最新的程序造成的。所以我就想在编译过程中实现一个自增版本号的功能,每次修改后,能自动生成一个版本号,并且能把它显示在程序的关于对话框等位置,这样工程人员就能直接把这些原因造成的问题排除掉了。让我失望的是vss做不到这一点,虽然它有“关键字扩展(keyword expansion)”功能,但实现不了我的需求。而如果要求每次编译前手工修改版本号,就是另外一个能否切实执行的问题,我对这类问题的总是很悲观的。

前面已经说过,在svn中,每次签入(提交)都会为整个代码库生产一个版本。生成它的同时,svn还会为其指定一个递增的修订号,利用这个修订号和一个配套的工具(SubWCRev),就可以做到自动生成版本号了。

2.3. 变更集

作为项目经理或设计人员,大家可能还会经常希望知道某个开发人员的某次签入到底修改了哪些内容,这一点在vss中也是做不到的。而在svn中,只要比较签入前的版本和签入后的版本就行了。实际上,在svn中,你可以比较任意两个版本之间的区别,甚至能追查到一个文件中每行代码的责任人。

2.4. 离线操作

这个在前面已经说过了,再提一次是想强调一下我有多希望配置管理工具支持此功能。

3. 相关工具和网站

  • TortoiseSvn: 是windows下功能最强、最实用的svn客户端。它与资源管理器的右键菜单集成,可以管理包括源代码在内的任何文件。它的“图标叠加(Icon Overlay)”功能,可以让我们从文件和文件夹的图标中直观的看出它们的状态,如是否被修改等。另外,前面提到的SubWCRev就是它的一部分。
  • AnkhSvn: 一个visual studio的svn插件,支持svn的大部分功能,并且比较好用。
  • VisualSvn: 也是一个visual studio的svn插件,应该比AnkhSvn好一些,不过它是商业软件。
  • VisualSvn Server: windows下svn+apache的组合,提供了一个mmc的管理界面,喜欢gui界面的人的福音。而且,虽然它和VisualSvn是同一家公司的产品,但它是免费的。
  • Subclipse: eclipse的svn插件,也已经很成熟,据说使用风格和eclipse自带的cvs插件非常像。
  • p4merge: 这是一个文件对比/合并工具,TortoiseSvn自带的文件比较工具还比较好用,但合并工具就差点了,起码没有vss的好用。能找到的工具大多只支持双视图合并。p4merge则能支持三视图甚至四视图,用起来方便很多。开发这个工具的公司也是做配置管理软件的,不过这个公司比较好,只对它的服务器端收费,其他工具都可以免费用。
  • http://www.tigris.org/:这是subversion、TortoiseSvn、AnkhSvn以及其它众多开源软件开发管理工具的官方站点。
  • http://www.subversion.org.cn/:svn中文网站。
  • http://www.iusesvn.com/:也是一个svn的中文网站,内容和上一个有很多是重复的。