实现大多数原子ClearCase提交

Pau*_*han 2 clearcase

我有一个项目,我需要在动态视图上执行许多操作.如果这些操作中的任何一个失败,或者程序中出现了一些错误,我需要能够撤销提交.

直接的方式似乎是简单地将命令放入队列中,然后,当我的程序完成处理时,执行队列.但是,我担心一些异常事件会中断提交并导致服务器上的数据集不一致.

或者,换句话说,我正在寻找一种在Clearcase动态视图中创建svn样式的"变更集"的方法.我正在使用的脚本语言是Perl,如果这很重要的话.

想法?

Von*_*onC 5

ClearCase中的操作的原子性在文件级别,没有严格等同的svn变更集(即"修订版").

在ClearCase中变更集的最接近的事是活性(UCM)的概念,或标签上的文件的收集组(一个UCM基线是实际上更接近,因为它代表的标签,你不能动,在预先定义的一套文件 - UCM组件 - )

现在,UCM与否,我建议:

  • 锁定分支上,您将签入(这样,VOB是仍然可以访问,并且没有人尝试将"原子"操作过程中添加的那个特定的分支其它版本)
  • 做你的签到
  • 解锁分支

如果遇到问题,当分支仍处于锁定状态时,您可以ct rmver添加版本.(注意:要小心使用:a rmver不能撤消)

  • 注意1:如果你不在UCM工作,你将必须记录所有签到的版本,以便能够他们

  • 注2:当我说"锁定分支"时,我的意思当然是:"锁定除了你以外的所有人"(-nusers yourLogin).这样,只有你可以制作签到(适用于你正在工作的分支(主要或另一个)的LATEST中的所有文件.


使用这种方法的问题是客户端(在分支上的LATEST中具有动态视图的其他用户)将原子事务期间看到的问题.
由于这些是动态视图,因此当这些文件逐个签入时,它们将看到签入的文件.这可能不太好,特别是如果有200个文件,并且所有进程都需要超过一分钟.

一种解决方案是让这些客户端视图将其配置规范设置为以下内容:

element * .../myBranch/FREEZED_LATEST
element * .../myBranch/LATEST
Run Code Online (Sandbox Code Playgroud)

如果您没有进行原子变更集提交,则标签FREEZED_LATEST不存在,并且所有客户端视图都应显示LATEST.所有人都可以立即看到任何签到.
但在原子提交期间,您可以:

  • 首先设置一个标签FREEZED_LATEST当前所有文件(目前最新的,那是)
    这意味着,所有的客户将只能看到在原子的特定版本提交
  • 做你的过程(一直或回滚:无论哪种方式,分支被锁定,客户端的配置规范仍然显示相同的"冻结"内容)
  • 删除标签FREEZED_LATEST(所有客户端继续查看原子操作产生的新LATEST,并且可以制作带有自己的一些结帐的新版本)