摘要 CVS很酷,但Subversion更酷。然而,假如你在使用Eclipse进行开发,那么你可能直到近来才能利用Subversion带来的优点。随着Subclipse的发行,Subversion可能会最终在你的Eclipse IDE环境充分发挥其威力而压倒CVS。
一、SCM和Subversion简介
软件配置治理(SCM)是治理源码并保持其安全的良好艺术,它能实现源码与其他团队成员之间保持共享,并且能够对之加以保护。良好地利用SCM,你能够轻易地跟踪软件的发行和新的开发分支;这样以来,可以更为轻易地标识和修正发行产品中的错误。
其实,有大量的SCM工具可用,既有开源的和也有商业化的,例如StarTeam,Perforce,BitKeeper和ClearCase。在开源世界里,事实上的SCM标准是并发版本治理系统(CVS),它被广泛应用于世界范围内的成百上千的开源和商业工程。然而,CVS也存在下列许多固有的缺陷,这使得它无法非常完美地适合于现代工程开发:
· 实质上针对文本文件的设计使得CVS处理二进制文件能力比较差。在每一次提交时,二进制文件被以整体形式传输和存储,这将带来带宽和磁盘空间的浪费。
· 在CVS中,你不能移动文件和目录。你唯一的选择基本上就是删除并且重新添加它们,从而失去了整个过程中的所有的文件历史信息。
· CVS中没有实现原子提交的概念。比方说,你要把10个文件提交到服务器,而该提交操作往往在整个过程的中途停了下来。(这很可能会发生,假如某人同时提交一个文件,或甚至假如你的网络失败或你的PC重新启动的话。)在这种情况下,服务器将仅记录下你的修正的一半信息,这可能会使代码基部分处于一种潜在地不稳定的状态。
Subversion是一种比较新的开源SCM工具,其设计目的是力图从根本上克服原CVS所具有的限制。它是一种良好设计的工具,具有适合于现代开发的许多新特征:
· 提交是原子化的。提交的文件都能够被正确加入到一个新的修订当中,否则仓库不会被更新;并且每一个新的修订仅由一次提交中的变化部分组成。
· Subversion对文本和二进制文件使用一种巧妙的二进制技术,这既优化了网络流量也优化了仓库磁盘空间。
· 在Subversion中,每一次修订都代表了一个特定时间内完整的目录树拷贝。文件和目录可以不加限制地进行移动。
· Subversion仅存储两个版本之间的修改内容,这不仅节约了磁盘空间,并且意味着标识一个新版本或创建一种新的子内容几乎可以立即实现。
· 你可以以多种途径来存取一个Subversion仓库,具体则依靠于你的需要:使用HTTP或HTTPS(与WebDAV一起使用),使用快速的专利性svn:协议,或直接经由本地文件,等等。
二、Subclipse插件与Eclipse的集成
一种良好的SCM应该与你的工作环境紧密地集成到一起。没有谁真正喜欢转到命令行以把文件添加到仓库。Eclipse很早就实现了CVS集成,但是直到最近Subversion用户仍没有被引起重视。现在,新的Subclipse插件提供了在Eclipse中的一种平滑的Subversion集成。
(一) 安装Subclipse插件
下面,你以通常的方法从更新站点下安装Subclipse:
1. 打开"Find and install"窗口("Help>Software Updates>Find and Install")。
2. 选择"Search for new features to install"选项并点击Next。
3. 点击"New Remote Site"并且创建一远程站点,使用名字Subclipse和URL http://subclipse.tigris.org/update_1.0.x(参考图1)。
4. 在结果安装窗口中,把"Subeclipse in the Features"选择到安装列表中,并且通过向导来开始安装插件。
5. 完成这些之后,重新启动Eclipse。现在,你可以继续往下进行!
图1.安装Subclipse插件
(二) 建立Repository定义
现在,既然你已经安装完插件;那么,接下来,你需要告诉它你的工程仓库位于何处。你是在SVN Repository视图中实现的。打开这个视图("Windows>Show View>Other>SVN Repository")并且在上下文菜单中选择"New>Repository Location"以显示一个如图2所示的对话框。输入适当的URL并且点击"Finish"。
图2.添加一个仓库定义
(三) 检出(Check Out)一个工程
一旦建立一个仓库,你就可以在SVN Repository视图中浏览所有的内容(见图3)。我们后面将会看到,这个视图是一种与Subversion进行交互的非常方便的方式。
图3.SVN Repository视图。
现在,让我们把一个工程检出到你的Eclipse工作区中。这只需选择你需要的Subversion仓库,打开上下文菜单,并且选择"Checkout"即可。这将打开一个具有两个选项的向导:
· Check out as a PRoject configured using the New Project Wizard-这个选项打开新工程向导,这可以让你使用内建的Eclipse工程类型配置工程。这个选项通常是最好用的,因为它让你使用相同的工程模板和配置屏幕,而当你创建一个常规工程时你经常使用它们。
· Check out as a Project in the Workspace-这个选项简单地在你的包含检出源码的工作区中创建一个Eclipse工程。
在以上两种情况下,你仍然需要更新工程的构建路径,因为在检出该工程源码之前,Eclipse不能确定这些java源码所在的位置。
(四) 把一个新工程导入到仓库中
假如你只是启动了一个新的工程,那么你需要把它导入到Subversion仓库。Subclipse提供了一种方便的方式来直接从你的IDE内部实现这一点。为此,只需要从Package EXPlorer视图下选择你的工程,并且在上下文菜单中选择"Team>Share Project"。你可以使用现有仓库之一或创建一新的仓库定义。在你指定仓库和工程名之后,你能指定你想放到仓库中的文件和目录并且提供一个初始注释(见图4)。这种方法非凡有用,因为它让你有选择地导入仅由Subversion治理的文件,即使该工程还包含其它文件(例如生成的类,临时文件或其它不是必需的内容等)。