1 本文简介

  Rational ClearCase 作为一款功能强大的软件配置管理( SCM )工具,在国内已经得到许多企业用户的认可并被广泛采纳。为了帮助大家更好的了解和使用 ClearCase ,本文将全方位解剖 ClearCase 的重要组成部分:视图( View )。

  2 ClearCase视图的分类

  我们知道,软件配置管理工具的一个基本功能是建立和管理开发人员的工作空间。在 ClearCase 中,工作空间被称为视图( View ),它可以选择所指定任务的每一个文件或目录的适当版本,并将它们呈现给使用者。通俗的讲, View 就像一个过滤器,依据一组配置规则从 VOB 中将我们需要的文件或目录的版本选择出来。 View 是访问 VOB 库中文件和目录版本的手段,通过视图,用户可以浏览、修改、构建可用的文件和目录。

  在实际使用中, View 分为两种类型,即 Dynamic View (动态视图)和 Snapshot View (静态视图,又称快照视图)。下面我们来看看这两种视图有什么差异:

  动态视图:

  • 自动保持与 VOB 库的同步更新;

  • 使用 MVFS 文件系统透明访问 VOB 库,不占用本机空间;

  动态视图无需将文件拷贝到本地目录,通过虚拟文件系统对 VOB 中的版本进行存取操作。

  • 动态视图的使用依赖于网络;

  • 提供了共享派生对象和构建审计功能,这是动态视图独有的。

  • 动态视图通过 mount 指定的 VOB 库来获取数据。

  动态视图采用 mount 的方式获取 VOB 中的数据,速度比较快,它是一个全局视图。

  静态视图:

  • 只能定期通过 update 操作实现文件的更新;

  • 文件被下载到本地,占用本地空间;

  • 可以离线工作,断网使用;

  • 可以在本地进行高速编译;

  • 使用静态视图占用 ClearCase 服务器资源较少;

  • 静态视图通过 load 指定的 VOB 库来查看文件。

  因此你可以只选择下载与你的需要有关的文件拷贝(除非你需要所有的内容),这个可通过通过专门的下载规则来实现。当然静态视图也可以卸载在下载规则中被过滤和删除的文件。

  通过对两种视图比较,我们会发现它们各有千秋。在实际使用中,当你希望离线工作或只需要 VOB 库中的部分代码时,建议使用静态视图,这样还能减少因对服务器频繁访问所造成的压力。如果你使用便携式电脑,使用静态视图则更加便利。

  当需要节省本地磁盘空间、希望频繁自动更新或者仅仅是为了查看文档、代码,创建动态视图既快速又不占用本机空间,是个不错的选择。

  3 如何创建视图

  当你安装了 ClearCase 客户端软件后,要做的第一件事就是创建 View 。如图 1 所示,我们打开 ClearCase Explorer ,以 Base ClearCase 为例,在工具栏里有一项“ Create View ”:

  

  图 1

  点击“ Create View ”后,出现图 2 ,因为我们是以 Base ClearCase 为例,这里选择默认即可。

  

  图 2

  根据你的需求选择创建 Snapshot View 或者 Dynamic View ,见图 3 所示:

  

  图 3

  如果你要创建静态视图,如图 4 ,需要指定该视图在本机的存储路径(存放从 VOB 库中 load 的文件和目录)。

  

  图 4

  如果你要创建动态视图,则只需要指定一个映射盘符即可,见图 5 。因为动态视图是通过 MVFS 访问 VOB 库中的数据,不需要将数据下载到本机。

  

  图 5

  在图 4 和图 5 中都有一个“ Advanced Options ”按钮,点击进入后见图 6 ,这里可以选择你的视图是存储在服务器端还是本机。 ClearCase 的 View 数据(主要是 View database 等)既可以存放在 View Server 中,也可以存放在本机。一般建议存放在 View Server 中,以便组织进行统一管理。

  

  图 6

  选择完成后,将进入如图 7 所示界面,这里有一个“ Inspect Config Spec ”,用来定义该视图的配置规约( Config Spec ),配置规约将决定哪些版本可以看到,点击进入:

  

  图 7

  进入“ Inspect Config Spec ”后,我们会发现里面有默认的规约,见图 8 ,可以直接使用。通常管理员或配置经理会根据开发的需要编写一些特定的配置规约供开发人员使用,在这里进行选择和修改。

  

  图 8

  完成了以上的选择和设置后,就可以成功创建一个视图了。

  4 视图的管理

  视图通常与任务对应,经过一段时间的使用后,用户因需要会创建了多个视图,这就涉及到视图的管理和维护问题。

  4 .1 与视图相关的基本操作

  对于普通开发人员而言,与视图相关的操作主要包括视图的创建和删除,操作相对比较简单。需要强调的是:在删除视图时,要使用 ”Remove View”进行操作,如图9所示。如果使用”Remove View shortcut”,则只是删除了该视图的快捷方式,更新后还会再次出现。

  静态视图有一个特有的操作是 update,需要定期进行,才能和VOB中的数据保持同步。

  

  图 9

  4.2 关于 hijacked文件

  我们知道,静态视图将 VOB中的文件下载到本地后,文件是只读的。如果你绕过检出(checkout)操作,只是去掉某个需要更改文件的只读属性就进行操作,那么该文件就被称为“劫持”( hijacked)文件。 具体的表现为:在 ClearCase Explorer 中,处于“ hijacked ”的元素会有一个带对号的红色圆圈。

  如果出现“ hijacked”,有两种操作方式可供选择:

  • 鼠标右击“ Hijacked”的元素,选择“Undo Hijacked”。为了不丢失你对文件所做的改动,Undo Hijacked之后,ClearCase自动生成一个后缀为“keep”的私有文件(view private files),这时你不仅取消了Hijacked,同时也保存了你的工作成果(当然如果不需要可以删除这个私有文件)。

  • 更新视图( update view),然后鼠标右击“Hijacked”的元素,选择“Check Out”,该元素将处于“checked out”状态,这时你可以继续对该元素进行改动,也可以直接做Check in操作, 完成文件变更的入库,形成新的版本。

  以上也给大家提供了利用静态视图离线或在家办公的方法,还不错吧。

  4.3 视图的迁移

  该部分内容主要针对 ClearCase管理员而言。视图的迁移主要是将View Server中的视图在同一个机器中从一个存储区域迁移到另外一个存储区或者跨服务器间移动。通常在视图存储空间不足或者为了提升View Server性能使用新服务器时,需要进行视图的迁移,这样原有的视图信息不会被破坏,客户端基本不受任何影响,迁移后可以正常使用原有的视图。

  下面我们举例说明如何将视图从 CCSERV1这台视图服务器迁移到CCSERV2上:

  4.3.1 首先对CCSERV1上的所有用户的视图信息进行备份。

  4.3.2 将CCSERV2安装为视图服务器,并创建相应的视图存储路径。

  4.3.3 做好以上准备后,就可以进行正式的迁移工作。

  • 在CCSERV1上停掉ClearCase服务,如图10所示。

  • 使用ccopy命令将CCSERV1的视图拷贝到CCSERV2上新建的视图存储目录中,如:

  ccopy G:\cc_Storage\views\ccview \\ccserv2\cc_ Storage\views\ccview

  上面的操作是将 CCSERV1中ccview目录中的视图信息拷贝到CCSERV2的ccview中,如果有多个目录需要进行拷贝可以写成一个脚本统一进行。

  

  图 10

  4.3.4 确认拷贝到CCSERV2的数据是否完整。

  4.3.5 启动CCSERV1上的ClearCase服务,在CCSERV2上对迁移的视图进行重新注册。

  因为可能涉及到成百上千的视图,单个进行注册是不现实的,需要通过程序进行。基本的思路是先将视图原有的注册信息删除,然后重新注册到CCSERV2上去。这里给大家一个perl语言编写的例子供参考:

  printf ("All Views begin registering:\n");

  @lines = `cleartool lsview -region soft1 -s`;

  foreach $line(@lines)

  {

  chomp ($line);

  $view_info = `cleartool lsview -region soft1 $line`;

  chomp ($view_info);

  $view_info =~ m/(\S+)\s+(\S+)/;

  $view_tag = $1;

  $view_stg = $2;

  printf "\n";

  printf("The old view stg is:%s\n",$view_stg);

  system("cleartool rmtag -view -region soft1 $view_tag");

  system("cleartool unregister -view $view_stg");

  $new_view_stg = $view_stg;

  chomp ($new_view_stg);

  if ($new_view_stg =~ m/ccview/)

  {

  $new_view_stg=~ s/\\\\ccserv1\\ccview\\views/\\\\ccserv2\\ccview \\views/;

  }

  printf ("The new_view_stg is:%s\n",$new_view_stg);

  $rc = system("cleartool register -view $new_view_stg");

  if ($rc)

  {

  print LOG_F "$line\n";

  }

  system("cleartool mktag -nstart -region soft1 -view -tag $view_tag $new_view_stg");

  printf "\n";

  }

  printf ("All Views register successfully!\n");

  上面的程序完成了将视图在 CCSERV1上原有的信息删除,然后重新注册到CCSERV2的功能。这里需要注意的是:如果存在多个region,需要分别进行处理。

  4.3.6 验证迁移后的视图使用是否正常。

  在客户端检查原有的静态和动态视图能否正常使用,可以做一些常见的操作,如checkout、checkin、update和mount(仅对动态视图)等。

  4.3.7 检查无误后可以将CCSERV1上的视图数据和视图存储路径予以清除。

  至此,整个视图的迁移工作大功告成。

  4.4 视图的清除

  因为用户对视图处理不当,在经过一段时间的运作后,会出现一些垃圾视图(即已经不再使用但没有被彻底清除),日积月累会严重影响 ClearCase 服务器的性能。可以使用以下命令予以彻底的清除:

  cleartool rmtag -view $tag;

  cleartool rmview -force -all -uuid $uuid;

  cleartool unregist -view -uuid $uuid;

  以上命令需要的 tag 、 uuid 信息可以通过 lsview 命令获取,将这些命令进行组合,写成一个脚本便可以实现批量清除垃圾视图。

  5 总结

  本文对 Base ClearCase中的View进行了较为详细的介绍(UCM方式基于活动,故有所差异,本文没有提及),希望能对大家有所启示。由于View本身牵涉内容较多,如有更深层次的需求,可以参考ClearCase自带的用户手册,做进一步的研究。

  本文缩略语:

  VOB(Versioned Object Base): 版本对象库,ClearCase 数据的存储库,它存储了处于版本控制下所有的文件、目录和元数据等。

  View: 视图,它可以选择所指定任务的每一个文件或目录的适当版本,并呈现它们。

  View Server:存储View数据的服务器。

  MVFS(Multiversioned File System):多版本文件系统,它通过使用标准操作系统协议增加一个新文件系统类型,MVFS提供了透明的版本控制机制。

posted on 2011-02-25 15:30  SamZhang  阅读(4745)  评论(0编辑  收藏  举报