摘要
Subversion (SVN)是一个版本控制系统,是CVS的极具竞争力的替代品。它支持CVS所缺少的一些重要特性,比如版本化的重命名、目录和元数据;还支持原子提交和 通过HTTP/HTTPS的远程访问。许多开源项目使用Subversion作为版本控制系统,其中包括BEA的dev2dev CodeShare 站点上的项目。 有一个简短的指南介绍了如何为CodeShare建立支持Windows的命令行SVN客户端和Tortiose SVN。然而,使用自己的IDE中的Subversion库才有意义。
本文描述如何在Eclipse IDE中使用Subversion,具体来说,介绍了Subclipse插件的安装和使用。顺着这个思路,我还将展示如何使用产生的配置来修改或扩展Subclipse插件本身。
安装Subclipse
安装Subclipse的最好方法是使用Eclipse Update Manager。在Eclipse 3.1中,它位于Help -> Software Updates -> Find and Install...菜单下。请选择Search,查找要安装的新特性,并以http://subclipse.tigris.org/update作为URL添加New Remote Site。
图1:使用Eclipse Update Manager安装Subclipse
扫描完更新后,您会看到一个可用特性的列表。我写这篇文章时,Subclipse 0.9.33是最新的更新版本。
图2:选择最新的Subclipse更新版本
在接下来的界面中,会请求用户接受许可证并选择安装位置。建议不要将新插件(包括Subclipse)安装在默认的Eclipse安装目录下,最好将其放 在一个外部扩展位置中。这会使手动卸载这些特性更加容易,如果需要的话;同时也使插件可以在多个版本的Eclipse安装之间共享,比如发行版、尝鲜 (early access)稳定版(M1、M2等等)和集成IDE版本。
图3:选择安装位置
此时,Update Manager已下载并安装了所选特性,然后请求重启Eclipse。
一旦重启Eclipse,用户就会在Preference对话框中看到一个新的SVN区域,并且还会看到有关Subversion活动的其他视图。可以使 用Window -> Show View -> Other...菜单将这些视图添加到Java Perspective中。
图4:添加关于Subversion活动的视图
我通常将SVN Repository视图添加到Quick Views中,而将SVN Resource History添加到位于Java Perspective工作区底部的一个标签组中。这样,在开发过程中,这两个视图就近便可用了,同时也便于利用拖放来运行某些任务,比如“获得资源历 史”(从诸如Navigator、Package Explorer、SVN Repository和Synchronize之类的面向资源的视图到SVN Resource History视图)。
在Subclipse中配置SVN接口
可以配置Subversion服务器来使用下列协议之一:
- SVN协议,一种轻量级的有状态协议,由独立的Subversion服务器(svnserve)所使用。安全版本svn+ssh使用基于ssh的隧道。
- http协议,基于WebDAV扩展,通常被作为模块部署在Apache HTTP服务器上。安全版本使用https,dev2dev CodeShare上的Subclipse安装使用的就是该协议。
- file协议,用于访问本地可用的Subversion库(例如,共享驱动器上的Subversion库),它是最少选择的库。
Subclipse使用专门的适配器抽象化来利用上述协议。可以在Window -> Preferences -> Team -> SVN对话框的插件属性中选择下列适配器中的一种。
图5:选择适配器
每一种适配器都有其自身的优点:
- JavaSVN是惟一完全基于Java的Subclipse客户端,是默认支持的。注意,JavaSVN不支持file:///协议。
- JavaHL是包装本地Subclipse API的瘦包装器。该适配器是为Win32平台预构建的,但是在其他所有的平台上必须手动构建(除非Unix发行版中包含它)。
- 命令行适配器,只有在不能安装JavaHL并且Subclipse库使用file:///协议时才可以使用。
大多数情况下都可以使用JavaSVN;只有需要时才选择JavaHL或命令行适配器。参考资料小节中的链接可以帮助解决特定用例,如配置HTTP代理、SSL客户端证书,等等。
连接到CodeShare上的SVN库
现在就可以连接到Subversion库了。对于dev2dev CodeShare上的项目,可以在访问选项页面中看到一个库的URL,可以从Version控制项目菜单中找到该页面。 这里是一个例子 。CodeShare SVN服务器要求用户使用的用户名和口令与其在dev2dev网站上所使用的相同。
图6:连接到Subversion库
如果连接参数设置正确,就可以看到一个SSL证书确认对话框。
图7:接受SSL证书
接受证书后,应该就可以浏览库并查看现有项目。
图8:查看SVN库中的现有项目
现在已经准备好,要开始使用Subversion和Subclipse插件了!
查看SVN中的现有项目
在SVN Repository视图中可以看到,在许多CodeShare项目以及使用Subversion的其他项目中都可以看到一种共同的布局,通常如下所示:
https://xjms-ra.projects.dev2dev.bea.com/svn/xjms-ra
+-- branches
+-- www
+-- xjms-ra
+-- mqseries (work in progress)
+-- activemq
+-- tags
+-- xjms-ra
+-- 0.0.1 (stable versions or releases)
+-- 0.0.2
+-- trunk
+-- www (project web site)
+-- xjms-ra (project source)
trunk文件夹中包含主线开发源代码;tags文件夹中包含稳定版或发行版;branches文件夹中包含来自替代开发线上的代码。在Subversion中,标签和分支仅仅是选中的源代码快照的版本化副本。若想获得更多详细内容,请参阅Subversion book。
可以在SVN Repository视图中选择当前项目的主线或者特定的标签或分支,并从弹出菜单中选择Check Out As...动作。接着就会出现一个指导性的标准New Project Wizard,它允许用户选择项目类型(例如,Java或Simple Project)、项目名称和位置,并在需要时配置Java build路径。
为新的CodeShare项目配置SVN库
版本控制库是任何项目的基础架构的重要部分,对于开源项目(包括CodeShare上的项目)而言,它还在开发人员与其他社区成员之间的交流中 起着重要作用。例如,它允许终端用户为最新的代码捐献补丁,并为重要的修复提供早期更新机制。由于它的重要作用,为一个新项目配置SVN库并从一开始就将 所有的项目代码置于版本控制之下就显得非常重要了。
创建了新CodeShare项目之后,SVN库就包含了trunk、tags和branches文件夹,以及trunk下的www模块,它包含项目Web 首页的index.html文件。可以在SVN Repository视图中验证这些,并使用该视图中的弹出菜单上的动作创建缺少的文件夹。
我们假设所有的源代码、build脚本、文档和其他项目资源被组织为一个Eclipse项目,那么就可以在Package Explorer或Navigator视图中使用弹出菜单中的Team -> Share Project...动作。Share Project Wizard会要求用户选择SVN库类型,然后在下一个页面中,可以选择一个现有库或配置一个新库。
图9:在Share Project Wizard中选择SVN库类型
在接下来的界面中指定模块名。为了与CodeShare项目布局相匹配,我们应该在trunk文件夹下创建模块,因此,指定trunk/<project name>作为模块名,比如trunk/xjms-ra。
图10:指定模块名
经过确认后,Subclipse会创建模块,并将所有的项目文件导入SVN库。
使用SVN库
当项目连接到SVN库以后,在Package Explorer和Navigator视图中会弹出一个Team菜单,显示特定于Subversion的全部动作。可以直接运行Commit、Update、Add to svn:ignore,以及Version Control with Subversion一书中所描述的其他动作。该书中的内容也可以在Help -> Help Contents -> Version Control with Subversion下的Eclipse帮助系统中找到。
Subclipse插件还允许使用Eclipse的Team Synchronize视图,它可以使用户从库中清楚地观察到哪些项将要提交、哪些项已经被其他开发人员更改并需要更新。从这个Synchronize视图中还可以执行大多数的SVN命令。
可以使用弹出的Team -> Synchronize with Repository菜单或位于主工具栏上的Synchronize...向导按钮将项目或工作集添加到Synchronize视图中。如果看不到该按 钮,那么请将Team命令添加到当前视图中;可以使用Customize Perspective对话框添加,该对话框可从主工具栏上的弹出菜单中获得(单击任意空白处),然后,使用Window -> Save Perspective As...菜单以相同的名称保存透视图。
图11:将命令组添加到当前透视图中
在工具栏下拉菜单中选择Synchronize...动作来启动向导。在第一个界面中,它又让用户选择SVN版本跟踪系统,然后会显示标准资源选择面板,用户可以选择同步整个工作区,也可以选择某组项目或者一个指定的工作集。
图12:同步工作区、工作集或选中的资源
一旦完成创建,Synchronize视图就可以使用版本控制系统安排自动刷新的时间。可以通过Synchronize视图菜单中的Schedule...菜单对其进行配置。这将有助于用户保持最新状态,还可以看到其他开发人员所做的所有改动。
图13:安排自动刷新的时间
由于Subclipse仍在发展,所以用户可能会遇到bug或者无法找到真正希望获得的一些特性。这带我们进入下一个话题。
修补Subclipse
当在Subclipse中遇到问题时,可以有多种选择。如果是瑕疵问题,那么可以简单地选择不使用该产品或等待下一个版本。还可以搜索问题跟踪系统以及邮件列表档案user@subclipse.tigris.org和dev@subclipse.tigris.org,有可能找到当前问题的应对措施或解释。如果这样没有帮助,那么可以在邮件列表中咨询此问题;如果有兴趣试着自己解决,那么,下面的段落将简要介绍如何开始调试和修补Eclipse。但是,如果非常希望有所捐助,那么一种好的方法是订阅dev@subclipse.tigris.org邮件列表,从而使您所做的努力与其他开发人员相协调,根据项目路线图调整您的想法。
着手开始真的非常容易,即使您以前从没有使用过Eclipse插件。需要将Subclipse项目放入Eclipse工作区中。Subclipse项目的Subversion库位于http://subclipse.tigris.org/svn/subclipse/,可以使用以前安装的Subclipse插件或者诸如命令行Subversion客户端或TortoiseSVN之类的外部工具来查看代码。还有一种非常好的办法是在tigris.org Web站点上注册,并请求Subclipse项目的Observer角色。然后,就可以使用相同的用户名连接到Subversion库了(也可以用 “guest”/“guest”进行只读访问),还可以在问题跟踪器(一个集成的Bugzilla库)上发表评论,并附上对问题的补丁(如果有的话)。
一旦连接到版本控制库,就需要在自己的工作区中检查下述项目。对每一个模块选择Check Out As...,选择一个位置和项目名(建议使用下表所列出的实际的插件名),并单击Finish。
trunk/svnClientAdapter | svnClientAdapter.jar | 用于非Windows系统,或者当用户需要构建svnClientAdapter或JavaHL时 |
trunk/subclipse/core | org.tigris.subversion.subclipse.core | 特定于Eclipse的插件后端 |
trunk/subclipse/javahl-win32 | org.tigris.subversion.javahl.win32 | 为svnClientAdapter和JavaHL预构建本地Windows二进制文件 |
trunk/subclipse/ui | org.tigris.subversion.subclipse.ui | 特定于Eclipse的UI |
trunk/subclipse/feature-plugin | org.tigris.subversion.subclipse | 介绍,无代码 |
trunk/subclipse/feature | org.tigris.subversion.subclipse (feature) | Subclipse特性 |
trunk/subclipse/book | org.tigris.subversion.book | Eclipse帮助小节,包括“Version Control with Subversion”这本书 |
trunk/subclipse/book-feature | org.tigris.subversion.book (feature) | “Version Control with Subversion”这本书的特写 |
trunk/subclipse/update-site | - | Subclipse和“Version Control with Subversion”一书的特写的更新站点 |
对于开发和测试,只需要org.tigris.subversion.subclipse.core, org.tigris.subversion.subclipse.ui以及org.tigris.subversion.javahl.win32或 svnClientAdapter;其他的模块仅在打包整个插件特性或构建更新站点时需要。
当所有的项目都在Eclipse工作区中之后,就可以试着运行了。使用Run -> Run...菜单(或Debug,在调试器下运行),启动新的Eclipse Application类型,并在Workspace Plug-Ins列表中选择Subclipse插件。如果使用已安装的Subclipse运行IDE,那么应该在External Plug-Ins列表中取消对Subclipse插件的选择,但是要使其他插件均保持选中状态。
图14:运行Eclipse应用程序
单击Run(或Debug),如果一切都配置正确,那么就会出现第二个Eclipse Workbench窗口;应该可以打开Subclipse视图,并像Eclipse本身的实例一样连接到库。此时,如果是在调试器下运行,就可以开始将断 点放到Subclipse类、或Subclipse所使用的Eclipse核心类中,调试器会停在这些断点上。一个非常好的起点是 org.tigris.subversion.subclipse.ui插件中的 org.tigris.subversion.subclipse.ui.actions包,它包括菜单或工具栏中特定于Subclipse的UI动作。 注意,可以使用UI注册这些动作,可以在plugin.xml中声明式地注册(通常是action元素),或者是在Java代码中编程式地注册,因此,这 两个地方都要查看。
假定已经完成了最棘手的部分,并且已经设法实现了更改,那么现在就该创建补丁并将其附在Subclipse 问题跟踪库中的原始问题上了。在创建补丁以前,请确保从版本控制库中选择最新的更改(如果有的话),并最后一次测试更改。如果一切都没有问题,那么就使用 Team -> Create Patch...菜单来启动向导。选择Save To Clipboard或Save In File System,并指定是否需要对子目录进行循环扫描来查看更改。
图15:创建补丁
创建了补丁之后,就可以将其发送至dev@subclipse.tigris.org邮件列表了,或者也可以在问题跟踪器中创建问题并将其附上。
结束语
诸如Subclipse插件之类的Eclipse平台开源扩展可以提高开发人员的生产力,降低出错的可能性,并增强开发团队内部的交流。本文演 示了如何安装、配置和使用Subclipse插件来从Eclipse IDE内部与Subversion版本控制系统进行交互。
以Subclipse插件为例,本文还演示了如何设置一个环境以进行Eclipse插件开发、如何调试现有插件、如何创建补丁。事实上,任何Eclipse用户都可以为该开源扩展以及Eclipse平台本身捐献想法和补丁。
我1年前就在用subeclipse1.1.8了