摘要
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中遇到问题时,可以有多种选择。如果是瑕疵问题,那么可以简单地选择不使用该产品或等待下一个版本。还可以搜索问题跟踪系统以及邮件列表档案mailto:user@subclipse.tigris.org?subject=和mailto:dev@subclipse.tigris.org?subject=,有可能找到当前问题的应对措施或解释。如果这样没有帮助,那么可以在邮件列表中咨询此问题;如果有兴趣试着自己解决,那么,下面的段落将简要介绍如何开始调试和修补Eclipse。但是,如果非常希望有所捐助,那么一种好的方法是订阅mailto:dev@subclipse.tigris.org?subject=邮件列表,从而使您所做的努力与其他开发人员相协调,根据项目路线图调整您的想法。
着手开始真的非常容易,即使您以前从没有使用过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。
库路径 | Jar或Eclipse插件名 | 描述 |
---|---|---|
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平台本身捐献想法和补丁。
参考资料
- Subversion——Subversion主页
- Version Control with Subversion——一本非常不错的Subversion方面的书
- Subclipse - Subversion Plug-in for Eclipse IDE
- JavaHL for Mac OS X
- Building JavaHL from sources
- Configuring an HTTP proxy connection for JavaHL and command-line adapters
- Configuring an HTTP proxy connection for JavaSVN
- Configuring SSL client certificates
- Configuring an svn+ssh:// connection for JavaHL and command-line adapter on Unix
- Configuring an svn+ssh:// connection for JavaHL and command-line adapter on Windows
- Configuring an svn+ssh:// connection for JavaSVN adapter
- Subclipse FAQ
- dev2dev Eclipse Technology Center
原文出处:http://dev2dev.bea.com/pub/a/2005/11/subclipse.html
作者简介 | |
Eugene Kuleshov 是一位独立顾问。他在软件设计和开发方面具有超过12年的经验,擅长于应用程序安全、企业集成(EAI)和面向消息的中间件。他的客户包括大型的金融和保险公司。 |