实现大多数原子ClearCase提交

时间:2009-07-30 15:54:25

标签: clearcase

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

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

或者,换句话说,我正在寻找一种在Clearcase动态视图中创建svn风格的“变更集”的方法。我正在使用的脚本语言是Perl,如果重要的话。

想法?

4 个答案:

答案 0 :(得分:5)

ClearCase中的操作原子性在文件级别,没有严格等同于svn changeset(即“修订版”)。

ClearCase中最接近变更集的是活动的概念(在UCM中),或者在文件集合上设置的标签(UCM基线实际上更接近,因为它代表了你无法移动的标签,在预定义的文件集 - UCM组件 - )

现在,UCM与否,我建议:

  • 锁定要进行签入的分支 (这样,vob仍然可以访问,并且在“原子”操作期间没有人试图在该特定分支上添加其他版本)
  • 办理登记手续
  • 解锁分支

如果遇到问题,当分支仍处于锁定状态时,您可以'ct rmver'添加版本。 (注意:谨慎使用:rmver无法撤消)

  • 注意1:如果您不在UCM工作,则必须记录所有已签入的版本以便能够对其进行操作

  • 注2:当我说“锁定分支”时,我的意思当然是:“为除了你以外的所有人锁定”(-nusers yourLogin)。这样,只有你可以制作签到(适用于你工作的分支机构(主要或其他)的LATEST中的所有文件。


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

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

element * .../myBranch/FREEZED_LATEST
element * .../myBranch/LATEST

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

  • 首先在所有当前文件上设置标签FREEZED_LATEST(目前处于LATEST,即) 这意味着,所有客户端只会在原子提交期间看到这些特定版本
  • 执行您的流程(一直或回滚:无论哪种方式,分支都被锁定,客户端的配置规范仍显示相同的“冻结”内容)
  • 删除标签FREEZED_LATEST(所有客户端继续查看原子操作产生的新LATEST,并且可以制作带有自己的一些结帐的新版本)

答案 1 :(得分:2)

使用v7.1.1 ClearCase支持原子提交。您可以将一组文件视为一个单元,并根据给定的条件检查或回滚。有关详细信息,请参阅更多信息,请参阅 https://publib.boulder.ibm.com/infocenter/cchelp/v7r1m0/index.jsp?topic=/com.ibm.rational.clearcase.relnotes.doc/topics/c_cc_relnotes_features.htm

答案 2 :(得分:0)

锁定所有其他用户。

备份服务器。

做你的提交。

如果出现严重错误,请从备份中恢复clearcase。

答案 3 :(得分:0)

我多年没有使用过clearcase,所以这里有一些流浪和幼稚的想法。

向前看并确定文件是否不同步。

我会在检查之前锁定你要检查的所有文件,如果你没有锁定,请用一条有用的信息中止整个混乱。

您可以“删除”办理登机手续吗?或者还原,HEAD看看以前的版本?定义撤消签入。

你能做一个临时分支,签到,然后合并/变基(我的术语在这里丢失)。 这样你的回滚就是杀死分支。虽然我记得因为它的分支而诅咒明确的同事。

通常,排队操作很好,但使用队列在潜在问题发生之前识别它们。另外,定义你的行为及其UNDO标准,所以如果他们想要做一些非伪原子的事情,你可以警告他们,“这可能会变得混乱”。