摘要 CVS很酷,但Subversion更酷。然而,若是你在使用Eclipse进行开发,那么你可能直到近来才能利用Subversion带来的优势。随着 Subclipse的发行,Subversion可能会最终在你的Eclipse IDE环境充分发挥其威力而压倒CVS。
1、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:协议,或直接经由本地文件,等等。
2、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 [url]http://subclipse.tigris.org/update_1.0.x[/url](参考图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管理的文件,即便该工程还包含其它文件(例如生成的类,临时文件或其它不 是必需的内容等)。
图4.把一个工程导入到一个Subversion仓库中
|
3、在Eclipse中使用Subversion
如今,既然你的支持Subversion的工程已经启动而且运行起来,那么大多数必要的Subversion命令就可经由"Team"上下文菜单存取 (参考图5)。你能够在Package Explorer中看到你的本地文件的状态(参考图6),其中,任何修改了的文件都被标记上一个星号。存储在仓库中的文件都显示一个小黄桶图标(表明了一 个数据库);尚未被添加到仓库中的文件以一个问号显示。
图5.大多数Subversion命令能被经由Team菜单存取
图6.你能够在Package Explorer中看到本地文件的状态
|
(一) 与Repository保持同步
从仓库中更新你的文件而且把你的变化提交到仓库是至关直接的过程,这可使用"Team>Update and Team>Commit"菜单选项来实现。在提交你的变化以前,你可能想看一下自从你的上次更新以来是否服务器上有任何文件被修改。为此,你可使 用"Team >Synchronize with Repository"。这个命令让你看到有哪些内容已经被局部地修改,有哪些内容在服务器上修改,以及这两种修改之间的任何冲突(参考图7)。你还能够 以可视化方式看到冲突的版本,而且在提交你的变化以前纠正任何比较突出的冲突。
图7.与仓库保持同步
|
(二) 使用属性
属性是Subversion具备创新性的特征之一。在Subversion中,你能够把元数据("properties")关联到任何文件或目录。你能够定义任何你喜欢的属性,可是Subversion也提供了一些有用的内置属性,例以下面图8中所提供的这些属性:
· svn:executable属性,容许你在支持这种能力的操做系统上设置一个文件的可执行标志。
· svn:need-lock属性,能够用来在文件(例如,对二进制文件很是有用)上强加排斥锁。一个定义了svn:need-lock属性的文件一次只能 被一我的修改。当该文件被检出时,它是只读的。若是你想修改该文件,你须要首先使用"Team>Lock"菜单选项。以后,使用"Team> Unlock"释放该文件,或仅提交你的变化。这一行为将释放该锁而且让其它的用户也获得该文件上的一把锁。
图8.把一个Subversion属性添加到一个文件中
|
三) Tag和Branch
在Subversion中,很容易建立新的tag和branch。你可使用tag来标识一个特定的版本(使用一种可读的名字,例如"Release 1.0")。;而一个branch用于新的开发工做而不影响主源码基(称做trunk)。在一个branch上的开发仍会继续进行,直到开发者已经为把变 化集成回主trunk做好准备。
在Subversion中,branch和tag都是经过制做给定修订的一个虚拟副本(以另外一个名字 和/或另外一个目录)建立的。在常规状况下,branch存储在branches目录下,tag位于tags目录下,尽管在实践中为了知足你的工程你可使 用本身的任何定制。
从Eclipse中,"Team>Branch/Tag"菜单可以使你建立branch和tag(参考图9)。其中,Browse按钮提供了一种方便的方法来查看有哪些branch和tag存在于仓库中。
当你使用"Team>Switch"建立成功一个新的branch或tag时,你能够很是容易地在branches之间进行切换。不管什么时候你切换 到一个不一样的branch(或返回到trunk),Subversion将仅更新文件(它须要保持你的当前工做的副本与目的branch之间的同步)。
图9.建立一个新的branch或tag
|
(四) 修订历史
象大多数SCM系统同样,Subversion让你跟踪你的源码的变化。"Team>Show in Resource History"菜单选项可以使你查询这些变化的列表(包括对一个文件,目录或甚至整个工程的改变)(见图10)。
记住,在Subversion中,提交是原子性的-一次提交由一组文件变化和一个全局注释组成。"SVN Resource History"视图向你显示每一次提交的一个简明视图,包括修改的文件和相关注释。
图10.历史资源
|
4、结论 Subversion是一种强有力的和很是灵活的SCM工具,也是CVS的一个成功的后继者。结合Subclipse,Subversion能最终在你的Eclipse IDE环境中获得全面的发挥。