2

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

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

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

想法?

4

4 回答 4

5

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

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

现在,无论是否是 UCM,我都建议:

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

万一出现问题,在分支仍被锁定的情况下,您可以 ' ct rmver' 添加的版本。(注意:小心使用:rmver不可撤消)

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

  • 注2:当我说“锁定分支”时,我的意思当然是:“为除你之外的所有人锁定”(-nusers yourLogin)。这样,只有您可以进行签入(适用于您正在处理的分支(主分支或其他分支)上 LATEST 中的所有文件。


使用这种方法的问题是客户端(在分支上具有最新动态视图的其他用户)将您的原子事务期间看到什么。
由于这些是动态视图,因此在签入这些文件时,他们将一一看到签入的文件。这可能不好,特别是如果有 200 个文件并且所有过程需要一分钟以上。

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

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

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

  • 首先在所有当前文件上设置一个标签FREEZED_LATEST(即当前在LATEST中)
    这意味着所有客户端在原子提交期间只会看到那些特定版本
  • 做你的过程(一路,或回滚:无论哪种方式,分支都被锁定,客户端的配置规范仍然显示相同的“冻结”内容)
  • 删除标签FREEZED_LATEST(所有客户端继续看到由您的原子操作产生的新 LATEST,并且可以制作带有自己的一些结帐的新版本)
于 2009-07-30T16:46:12.617 回答
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

于 2010-10-19T22:44:30.493 回答
0

锁定所有其他用户。

备份您的服务器。

做你的承诺。

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

于 2009-07-30T16:00:08.607 回答
0

我已经很多年没有使用 clearcase 了,所以这里有一些杂散和幼稚的想法。

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

我会在签入之前锁定您要签入的所有文件,如果您未能锁定其中一个,则中止整个混乱,并提供有用的消息。

你可以“删除”签到吗?或者revert,所以HEAD看的是以前的版本?定义您对签入的撤消。

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

通常,排队操作很棒,但使用队列可以在潜在问题发生之前识别它们。此外,定义你的动作和他们的 UNDO 标准,所以如果他们想做一些不是伪原子的事情,你可以警告他们,“这可能会变得一团糟”。

于 2009-07-30T16:17:34.687 回答