原文地址:http://www.cnblogs.com/aijava/archive/2009/08/28/2191846.html
5.5 特殊情况及其处理
这里将给出一些您每天或在软件开发周期中可能会碰到的常见情况,以及如何使用Eclipse来处理这些情况的建议。某些情况的解决可能需要使用CVS,但通常只使用Eclipse就可以处理它们。
5.5.1 对项目资源进行重命名、移动和删除
● 避免重命名CVS控制之下的项目。如果您这样做了,那么所做的命名修改只在该项目所处的工作空间中有效。保留在CVS中的仍是该项目的初始名。如果必须修 改项目的名称,那么您最好先使用Team | Disconnect…操作来解除该项目与CVS的关联关系,然后再对该项目重命名。事实上,重命名后的项目会被看作是新项目。在将重命名后的项目重新连 接到CVS时,您必须像定义任何新项目一样将该重命名后的项目定义到CVS中。
● 对文件夹的重命名操作会导致CVS中出现一个新文件夹。幸运的是,原文件夹中的内容会被移动到新文件夹中。如果您启用了CVS首选项Prune empty directories,那么在从CVS检出资源后,该旧文件夹将不会出现在您的工作空间中。
● 如果您将工作空间中的某资源删除了,那么在向CVS提交了更改后,保存在CVS中的该资源也会被删除。要记住的是文件夹决不会在CVS中删除。CVS首选 项Prune empty directories使得这些文件夹隐藏在视图中。默认情况下,CVS首选项Prune empty directories是被启用的。
● 因为修改可能会涉及多个项目,所以在进行全局修改前,您需要确保工作空间中的所有项目是资源库中的最新版本。Java类的重构是一个可能导致工作空间被广泛修改的操作。项目间的资源移动也可能产生这种影响。
● 在CVS透视图中,项目之间资源移动的结果是:所要移动的资源添加到目标项目中,而源项目中的该资源会被删除。移动到目标项目中的资源必须被添加到版本控制中。而资源重命名的效果与此相同。
● 在文件被修改后,如果您要执行诸如同步等CVS操作,那么我们建议您在项目层次上进行同步(即使您的更改可能仅涉及一个单独文件)。例如,如果您对一个文 件进行了重命名这一CVS的删除和添加操作,那么在文件层次上的同步将只会检测添加操作而不检测删除操作。而项目层次上的同步则会对添加和删除操作都进行 检测。
● 在所进行的修改涉及整个应用程序的情况下,您应该将这次修改通知给自己所在的小组,以避免不必要的冲突。此时,一旦条件满足,您就应该提交修改。冲突的解决可能是冗长乏味而又难以解决的。
5.5.2 取消修改:使用替换和比较操作
有时,我们都希望事情能够重新开始。在人的一生中, 这可能不容易。但是对于Eclipse和CVS来说,这要简单得多。根据您的需要,您有多种选择。在先前的几章中,您看到了如何使用快捷菜单操作 Replace With和Compare With用工作空间中的本地历史记录来替换和比较资源。通过使用CVS,您对资源的替换和比较操作就有了额外的选择。如果您尚未最终完成某个修改,而且之 后一段时间里根本就没有继续这次修改。这种情况下,Compare With操作可能会非常有用,它会使您记起上次停止修改的地方。在使用上述Replace With和Compare With操作时,您是用来自HEAD流(或者其他分支/版本、某一个具体版本)的最新资源来替换或比较当前资源的。
5.5.3 通过建立分支来进行版本维护和新版本开发
在小组已经交付了您的应用程序并准备开始下一个版本的开发工作时,您可能喜欢所有的后续开发能在下一版本所指派的特定分支处开始,同时还要允许先前版本的服务。这里所给出的就是在Eclipse中可用的一种方法。
● 在包含了最近已完成版本的分支(或HEAD)中,请选择所有的项目。然后在所选项目上使用Branch…快捷菜单,并输入该新版本的新分支名。这样,所选 择的全部项目以及这些项目的内容将用下一个版本分支名来标记。在CVS Repositories视图中,这些项目会被列在那个分支名之下。在从那个分支处将这些项目检出到您的工作空间之后,接下来的操作是基于该新版本分支 的。
● 您可重复上述过程以创建一个单独的维护分支。该维护分支独立于上面所创建的新版本分支。
● 为了能以维护分支为基础,在工作空间中对新版本分支进行合适的前向修改,您可以通过使用Compare With | Another Branch or Version…操作来确定这两个分支之间的差别。在Compare视图中,您可以手动合并从维护分支到新版本分支的更改。
5.6 其他功能
在这一节中,我们将介绍几个非常有用的Eclipse功能。这些功能有助于您提高CVS和Eclipse的使用效率。
5.6.1 编辑器中的快速差别功能对CVS的支持
在本书第2章“Eclipse入门”中,您知道编辑 器所支持的快速差别功能可对文件的添加和修改操作加上注释。如果您在Workbench | Editor | Quick Diff首选项页面中启用了Latest CVS Revision选项,那么快速差别功能所添加的文件注释是在参考CVS中该文件最新版本的基础之上添加的。在将更改提交到CVS或用CVS中该文件的某 一版本来替换该文件时,快速差别功能所添加的注释会被删除。
5.6.2 补丁程序:快速而又简单地共享更改
补丁程序(patch)是一个包含了某一资源的资源库实例和该资源的工作空间实例之间差别的文件。补丁程序可表示出一个单独文件(或完整项目)中的差别。补丁程序允许您共享尚未提交到CVS的更改。有很多原因使得补丁程序非常有用。
● 由于您没有向CVS提交资源的权限,所以您需要将该补丁程序发送给具有资源提交权限的人,然后再由他向CVS提交资源。
● 您需要为所遇到的问题准备一个应急修改或临时工作空间。
● 在将重要的更改提交到CVS之前,您可能想让别人对您的更改进行校验。在这种情况下,您可以将补丁程序发送给校验人以让他们进行测试。
通过使用快捷菜单Team | Create Patch…,我们就可以创建补丁文件。该操作会调用Create Patch向导来指导您完成补丁文件的创建。若要应用某补丁程序,则使用快捷菜单Team | Apply Patch…。该操作会调用Apply Patch向导。Eclipse联机文档Workbench User Guide的Working with patches 一节中有关上述两个操作的描述非常精彩。
5.6.3 项目集:加快新工作空间
小组支持为工作空间中的项目(一个或多个)提供了版 本控制信息的封装功能。该封装功能被称为项目集。项目集的目的是从执行任务所需的资源库中把需要的全部项目都预先准备到一个工作空间中。在应用程序构建过 程中可能要用到存在相互依赖关系的多个项目。下述操作可能是单调乏味而又容易产生错误的:决定所需项目,然后再将这些所需的正确项目从资源库中手动添加到 工作空间中。项目集是Eclipse的一个功能单元。资源库提供程序可对是否支持该功能进行选择(很多资源库提供程序都会选择是)。CVS对项目集提供了 支持。一个项目集所封装的项目可能是由不同资源库管理的。
项目集信息包含在一个文件中。若要创建该项目集信息 文件,则在菜单栏上选择File | Export | Team Project Set选项。若要使用该项目集信息文件,则在菜单栏上选择File | Import | Team Project Set选项。通过使用Export向导,我们可以对项目集中所包含的项目进行定义。出于通用的考虑,最终的项目集信息文件可被发送给别人以在CVS中进行 导入或维护。对于所开发的应用程序来说,您可以为其开发生命周期关键节点处的快照维护多个项目集文件。
在导入过程中,项目集文件中定义的所有项目都被从 CVS中自动检出到您的工作空间中。在导入过程中,一种可能比较稳健的做法是禁用自动构建首选项设置(Workbench首选项页面中的Build Automatically设置)。通过禁用Build Automatically设置,我们就可以在导入过程中避免编译和构建操作,进而加快资源的导入。但在导入操作完成后,请记住要重新启用该首选项。
5.6.4 断开项目与CVS的连接或为项目重分派一个CVS资源库
通过使用Team | Disconnect…操作,您可以断开项目与CVS的连接。在选择了快捷菜单Team | Disconnect…后会出现一个对话框。该对话框会对您进行询问,以让您对是否保存该项目的CVS元数据作出决定。如果选择了保留该项目的CVS元数 据,那么通过使用Team | Share Project…操作,我们就可以将该项目与同一CVS资源库进行重新连接。如果您删除了该CVS元数据,那么可以将该项目共享给其他资源库。
作为选择,如想将项目重新分派给另外一个CVS资源库,那么您可以先为该项目打开CVS资源库页面,然后再选择Change Sharing…按钮。该操作与使用Disconnect…以及Share Project…操作在逻辑上等价。