Más contenido relacionado
Eclipse下使用Subversion
- 1. Eclipse 下使用 Subversion
字号: 小 中 大 | 打印 发布: 2008-6-01 02:17 作者: webmaster 来源: 本站原创 查看: 392 次
作者:朱先忠编译 转自天极 http://dev.yesky.com/356/2578856.shtml
CVS 很酷,但 Subversion 更酷。然而,如果你在使用 Eclipse 进行开发,那么你可能直到近来才能利用
Subversion 带来的优点
摘要 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 的集成
- 2. 一种良好的 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"。
- 3. 图 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
源码所在的位置。
(四) 把一个新工程导入到仓库中
- 4. 如果你只是启动了一个新的工程,那么你需要把它导入到 Subversion 仓库。Subclipse 提供了一种方便的方式
来直接从你的 IDE 内部实现这 一点。为此,只需要从 Package Explorer 视图下选择你的工程,并且在上下文菜
单中选择"Team>Share Project"。你可以使用现有仓库之一或创建一新的仓库定义。在你指定仓库和工程名之
后,你能指定你想放到仓库中的文件和目录并且提供一个初始注释 (见图 4)。这种方法特别有用,因为它让你有
选择地导入仅由 Subversion 管理的文件,即使该工程还包含其它文件(例如生成的类,临时文件或其它不 是必
需的内容等)。
图 4.把一个工程导入到一个 Subversion 仓库中
三、在 Eclipse 中使用 Subversion
现在,既然你的支持 Subversion 的工程已经启动并且运行起来,那么大多数必要的 Subversion 命令就可
经由"Team"上下文菜单存取 (参考图 5)。你可以在 Package Explorer 中看到你的本地文件的状态(参考图 6),
其中,任何修改了的文件都被标记上一个星号。存储在仓库中的文件都显示一个小黄桶图标(代表了一 个数据
库);还没有被添加到仓库中的文件以一个问号显示。
- 5. 图 5.大多数 Subversion 命令能被经由 Team 菜单存取
图 6.你可以在 Package Explorer 中看到本地文件的状态
(一) 与 Repository 保持同步
从仓库中更新你的文件并且把你的变化提交到仓库是相当直接的过程,这可以使用"Team>Update and
Team>Commit"菜单选项来实现。在提交你的变化之前,你可能想看一下自从你的上次更新以来是否服务器上
有任何文件被修改。为此,你可以使 用"Team >Synchronize with Repository"。这个命令让你看到有哪些内
容已经被局部地修改,有哪些内容在服务器上修改,以及这两种修改之间的任何冲突(参考图 7)。你还可以 以可
视化方式看到冲突的版本,并且在提交你的变化之前纠正任何比较突出的冲突。
- 6. 图 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 目录下,尽管在实践中为了满足你的工
程你可以使 用自己的任何定制。
- 7. 从 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.历史资源
四、结论
Subversion 是一种强有力的和非常灵活的 SCM 工具,也是 CVS 的一个成功的后继者。结合
Subclipse,Subversion 能最终在你的 Eclipse IDE 环境中得到全面的发挥。