介绍一下Subversion

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

前一段时间,公司讨论统一配置管理工具时,我推荐了 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/

项目VssClearcaseCvssvn
文件/目录的重命名或移动是?
原子提交
变更集可间接实现
中文支持未知
visual studio 集成
eclipse 集成未知未知
http 访问8.0支持
离线操作未知
权限管理较差
易用性简单复杂较简单较简单
授权商业商业GPLApache/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 的中文网站,内容和上一个有很多是重复的。