CVS 标签与分支

转载至IBM【 ECLIPSE 小组开发环境实践: 第 2 部分】-片段
标签与分支

1.标签
考虑下面的应用场景:在项目基本完成的时候,我们希望为此时的文件状态(快照)建立一个标签milestone1。在后续的程序修改过程中,如果发现了一些在版本milestone1中不存在的BUG,我们就可以用milestone1这一统一的标识获取当时的文件快照并与修改后的文件进行对比,而不需要对每个文件都记住其修订版号。
在ECLIPSE中,有两种方法给模块建立标签。方法1.在工作拷贝上建立标签,就JAVA项目而言,可以通过JAVA透视图的右键菜单进行操作;方法2. 在CVS资源库视图中建立标签。在建立标签之前,最好保持工作拷贝与资源库的同步。以方法2为例,在CVS资源库视图的HEAD节点下选中希望建立标签的模块,在出现的右键菜单中选择【Tag as Version...】,在随后出现的对话框中添加标签名即可。图29是对模块UnitTest建立了milestone1和milestone2两个标签后的结果。
图29:建立了两个标签后的CVS资源库视图
CVS 标签与分支_第1张图片
标签与文件修订版号的关系见图30。某个标签内各个文件的修订版号可能不同,例如在标签1中,文件A的修订版号是1.2,而文件B的修订版号是1.3;同一个文件的相同修订版号也可能分属于不同的标签,例如在标签1和标签2中,文件B的修订版号都是1.3。
图30:标签示意图

从标签签出的模块是静态的,即使修改了本地的拷贝文件也不能向资源库提交。为了证实这一点,读者可以先签出Versions节点下的模块,在本地做修改后再向CVS资源库提交修改。此时将出现类似图31的错误提示画面。表明提交的文件属于标签milestone1,而milestone1不是分支因而不能提交。
图31:从标签签出的拷贝修改后也不能被提交
CVS 标签与分支_第2张图片

2.分支
2.1 建立分支
虽然通过标签可以方便地管理多个文件的修订版号,但是通过标签获得的文件拷贝是静态的,无法在其基础上修改并提交。因此,也就不能支持下面场景中的并发开发。假设某软件公司经过一段时间的开发,发布了产品A的1.0版。为了进一步扩大该产品的市场份额,随即在1.0版本的基础上进一步研发功能更强大的2.0版。但是公司还必须对产品1.0版进行维护和支持,如果用户在1.0版的使用过程中发现了BUG,应能尽快推出1.0修正版并发布相应的补丁程序。也就是说,开发人员要能在1.0修正版与2.0版这两条开发路线上同时工作。建立分支则可以支持上述要求。
与建立标签类似,在ECLIPSE中建立分支也有两种方法。本文以在CVS资源库视图中的操作为例演示分支的建立过程,其步骤如下:
1. 按建立标签的方法建立一个新的标签,例如v1_0。
2. 选中新标签v1_0,在右键菜单中选择【Add to Branch List...】(不限于新标签v1_0,可以在任意标签上操作,但是建立分支应当在关键时刻进行)。
3. 在出现的对话框中输入分支名,例如输入"UnitText1_0_X"并确定,此时就建立了分支。但是,此时的分支是空的,没有与之相关联的资源。
4. 选中新标签v1_0,在右键菜单中选择【Tag with Existing...】,在出现的对话框中打开节点Branches并选择在步骤3新建立的分支UnitText1_0_X,最后按OK按钮确定后就完全建立了一个新的分支。
分支建好后的CVS资源库视图如图32所示。
图32:建立分支后的CVS资源库视图
CVS 标签与分支_第3张图片
现在,就可以从主分支和UnitText1_0_X分支分别获得工作拷贝。从主分支获得的工作拷贝在提交后将反映到主分支上,而从UnitText1_0_X分支上获得的工作拷贝在提交后将反映到UnitText1_0_X分支中,在主分支和UnitText1_0_X分支上可以互不影响地进行并发开发。结合上述开发场景,产品A 1.0版的修正版对应UnitTest1_0_X分支,而产品A 2.0版可以在主分支上继续开发。
2.2 分支修订版号
分支中的修订版号与主分支中的修订版号略有不同,主分支、分支及修订版号的关系可用图33来说明。
图33:主分支与分支示意图

图34显示了文件cvstest.txt在UnitTest1_0_X分支上第一次提交后修订版号的变化情况。其修订版号不是从"1.10"转变为"1.11",而是转变为"1.10.2.1"。如果对该文件再进行一次提交,其修订版号将转变为"1.10.2.2"。即变化的是最后一个小数点后的数字。
图34:分支修订版号变化

2.3 将分支上的修改合并到主分支
继续2.1中的场景,开发人员在开发产品A 2.0版的同时还对1.0版进行维护。开发人员根据产品A 1.0版用户的反馈修正了一些BUG,由于产品A 2.0版也是基于1.0版继续开发的,他们发现有些BUG在开发中的2.0版中也存在。此时,就希望能将1.0修正版中的修改合并到主分支中。
图35-39演示了分支合并的过程。建立UnitTest1_0_X分支后继续在主分支上修改并提交cvstest.txt,结果如图35所示。
图35:分支合并1--主分支中的文件内容

从UnitTest1_0_X分支签出一个项目(如果用户jiangch或cvsuser2使用现有的ECLIPSE,则在签出项目时需要选择【Check Out As...】菜单并给项目取一个不同于"UnitTest"的名字),对文件cvstest.txt进行修改并提交,结果如图36所示。从图36还可以看出,从分支签出的项目在项目名称的后面还会注明分支的名称。
图36:分支合并2--UnitTest1_0_X分支中的文件内容
CVS 标签与分支_第4张图片
选择主分支工作拷贝的cvstest.txt,在其右键菜单中选择【Team】→【Merge...】,出现如图37所示的对话框。在"希望被合并的分支或标签"输入框中输入"UnitTest1_0_X";在随后的"通用基版本" 输入框中输入"v1_0",其意义为分支的起源版本(参见本文建立分支的步骤3和步骤4)。
图37:分支合并3--选择希望被合并的分支及其起始标签

在图37中点击"Finish"按钮,将出现同步透视图。如果希望将分支中文件内容的第二行合并到主分支中,只需将其从对比编辑器第二列拷贝至第一列,然后在文件的右键菜单中选择【Mark as Merged】(见图38),最后在文件的右键菜单中选择【Commit】。
图38:分支合并4--在透视图中进行合并操作

合并后的结果见图39。
图39:分支合并5--合并后主分支的结果
CVS 标签与分支_第5张图片

学习
免费电子书《Open Source Development with CVS》: http://cvsbook.red-bean.com/
CVS和Nightly Build技术,杨锦方,清华大学出版社,2002
CVSNT与ECLIPSE版本配合的相关信息:
http://download.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/eclipse-news-part1c.html
CVSNT与CVS的比较: http://www.march-hare.com/cvspro/compare.htm
ECLIPSE官方网站: http://www.eclipse.org
CVSNT的官方网站: http://www.march-hare.com
在DeveloperWork网站上还有一篇关于ECLIPSE与CVS的文章: 使用 Eclipse 平台共享代码 -- Eclipse 如何使用源代码版本控制

获得产品和技术
ECLIPSE下载地址: http://www.ECLIPSE.org/download/
CVSNT下载地址: http://www.march-hare.com/cvspro/

你可能感兴趣的:(eclipse,OS,IBM,cvs,OpenSource)