ClearCase Config_Spec 之如何利用Config_Spec

来源:互联网 发布:nginx bad request 编辑:程序博客网 时间:2024/05/23 01:51

本文欢迎任何非商业转载,要求:转载必须转载全文,并加明作者:崔秉正,出处:http://blog.csdn.net/battle_cry,谢谢!

1                   如何利用Config_Spec

1.1           Base ClearCase应用

应用Base ClearCase进行软件开发,一定要用到Config_Spec,因为新建的General视图中显示了主分支main上的最后版本,要在需要的版本上进行修改一定要修改Config_Spec

应用Base ClearCase做开发时,尽量每个完整的任务对应一个视图。这个视图开放权限可以让所有完成任务所需要的人员访问,在完成任务后,将所有修改打上相应的Label,备份Config_Spec并将这个视图删除。

根据需要可以给任务定义一个分支,需要注意,要使用分支前一定要在VOB中创建一个新的branch typeConfig_Spec不能自动创建branch type,如果在VOB中没有,在Checkout时会报出错误。如果是多个VOB协同工作,最好定义一个Admin VOB,在Admin VOB定义一个Global Branch Type以协同。

如果可能最好是在以前确定好的一个Label上开始新的工作,这样可以不必维护复杂的Config_Spec;如果发现有多个任务需要的配置项的版本映射规则相同,但是会在此基础上创建不同的分支,则先创建一个视图,维护Config_Spec,选择公用的版本映射规则,但是在其中不要应用任何mkbranch选项,在此视图基础上打一个Label,之后将这个视图删除,在这个Label的基础上创建新的不同的Config_Spec以进行工作。例如:

element …/Config.java …/Support_Telecom/LATEST –time 18-AUG-2005

element …/config.xml …/Support_Telecom/LATEST –time 18-AUG-2005

element * …/Support_Telecom/LATEST

element * /main/LATEST

发现在对电信的支持过程中在2005815日后第一个版本的Config.javaconfig.xml是正确的,其后修改错误,但是其他的配置项是正确的。

我们可以地这个View上为配置项打上labelRight_ For_Telecom_2006_4_29

新的任务是Telecom_New_Feature,则视图的Config_Spec可以如下

element * CHECKEDOUT

element * Right_Config_For_Telecom_2006_4_29 –mkbranch Telecom_New_Feature

ellment * /main/LATEST –mkbranch Telecom_New_Feature

需要注意,在最后一行要加上–mkbranch Support_Other,否则新增加的配置项会在main分支上。实际上可能需要多个-mkbranch,以保证分支的层次能够反映实际的情况。例如:Supprt_OtherFramework_2.5基础上进行的支持工作, Framewokr_2.5是主分支main的子分支,则应该写成:

element * CHECKEDOUT

element * Right_Config_For_Telecom_2006_4_29 –mkbranch Telecom_New_Feature

element * /main/Framework_2.5/ Support_Telecom/LATEST  –mkbranch Telecom_New_Feature

element * /main/Framework_2.5/LATEST –mkbranch Support_Telecom

ellment * /main/LATEST –mkbranch Framework_2.5

这样会保证新增加的配置项会从主分支main下一层层的创建子分支,直到/main//Framework_2.5/ Support_Telecom/ Telecom_New_Feature

在实际的项目中,Config_Spec远比本文描述的复杂,需要根据实际情况做调整。

1.2           历史版本重现

在实际情况中常常会出现客户发来缺陷报告,指明在某一个版本上出现了缺陷,这时需要我们重新搭建环境来进行缺陷重现,过程中需要重现历史版本。在前文中提到,针对需要重现的历史版本,如果所需要的所有配置项都打上了Label,则通过Config_Spec是非常简单的事情。例如,以下Config_Spec可以将Framework_2.5_patch1这个版本取出:

element * Framework_2.5_patch1 –nocheckout

element * /main/0 –nocheckout

我们发现和以前的Config_Spec不同的是,没有了element * CHECKEDOUT这行,而且每个匹配规则下也加上了-nocheckout选项,这是因为这个视图创建的目的只是为了获取版本,而不是修改,这样可以防止误操作而得到了错误的版本。

但是一般情况下PatchLabel不会打上所有配置项,而是只打上修改的配置项的相应版本,改进Config_Spec如下:

element * Framework_2.5_patch1 –nocheckout

element * Framework_2.5 -nocheckout

element * /main/0 -nocheckout

这种情况下,如果2.5版本中没有这个Bug,只是Patch1修改所引起的,想看到修改了哪些版本,一般人认为第一个Config_Spec就可以了,但是发现没有显示任何内容,这是为什么呢?

因为在ClearCase中,目录也是配置项,在修改过程中,可能没有增加任何配置项,所以patchLabel没有打在任何目录上。所以看不到任何内容。我们可以修改如下:

element * Framework_2.5_patch1 –nocheckout

element –directory * Framework_2.5 -nocheckout

element * /main/0 -nocheckout

这时我们就可以看到了修改的内容,前题是Framework_2.5这个Label打到了所有的相关配置项上,包括目录配置项。

element –directory * Framework_2.5 –nocheckout这一行只匹配目录配置项。

1.3           UCM应用中的调整

由于应用Base ClearCase进行开发对ClearCase配置管理工程师的要求比较高,所以许多公司应用UCM方式进行开发,但是在开发过程中有时会出现一些问题,当前Stream上有的些版本与其他Stream上的有些版本合并在一起才是所需要,而这些配置项在同一个Component中,不能通过基线的组合达到要求,这时就要利用Config_Spec进行调整。

先创建一个General视图,根据需要修改Config_Spec,之后在这个视图上打上Label,再执行ComponentImport Label将这个Label转换为UCM的基线,以这个基线为基础新建一个project就可以达到要求。

例如:

element …/Config/... …/Patch2/LATEST -nocheckout

element * …/Patch3/LATEST -nocheckout

element * …/Framework_2.5/LATEST -nocheckout

element * /main/0 –nocheckout

这个Config就可以满足将Patch2Config目录Patch3的其他修改结合的任务。

需要注意的是mklabel后必须将这个Label引入,否则不能应用到UCM中。