我有一个项目,我需要在动态视图上执行一些操作。如果这些操作中的任何一个失败,或者程序中出现一些错误,我需要能够退出提交。
直截了当的方法似乎是将命令简单地放入队列,然后,当我的程序完成处理时,执行队列。但是,我担心一些异常事件会中断提交并导致服务器上的数据集不一致。
或者,换句话说,我正在寻找一种在 Clearcase 动态视图中创建 svn 风格的“变更集”的方法。我使用的脚本语言是 Perl,如果这很重要的话。
想法?
我有一个项目,我需要在动态视图上执行一些操作。如果这些操作中的任何一个失败,或者程序中出现一些错误,我需要能够退出提交。
直截了当的方法似乎是将命令简单地放入队列,然后,当我的程序完成处理时,执行队列。但是,我担心一些异常事件会中断提交并导致服务器上的数据集不一致。
或者,换句话说,我正在寻找一种在 Clearcase 动态视图中创建 svn 风格的“变更集”的方法。我使用的脚本语言是 Perl,如果这很重要的话。
想法?
ClearCase 中操作的原子性在文件级别,没有严格等同于svn 变更集(即“修订版”)。
ClearCase 中最接近变更集的是活动的概念(在 UCM 中),或者是文件集合上的标签集(UCM 基线实际上更接近,因为它表示您无法移动的标签,在预定义的集合上)文件 -- UCM 组件 --)
现在,无论是否是 UCM,我都建议:
万一出现问题,在分支仍被锁定的情况下,您可以 ' ct rmver
' 添加的版本。(注意:小心使用:rmver
不可撤消)
注意 1:如果您不在 UCM 中工作,则必须记录所有签入版本以便能够对其进行 rmver
注2:当我说“锁定分支”时,我的意思当然是:“为除你之外的所有人锁定”(-nusers yourLogin
)。这样,只有您可以进行签入(适用于您正在处理的分支(主分支或其他分支)上 LATEST 中的所有文件。
使用这种方法的问题是客户端(在分支上具有最新动态视图的其他用户)将在您的原子事务期间看到什么。
由于这些是动态视图,因此在签入这些文件时,他们将一一看到签入的文件。这可能不好,特别是如果有 200 个文件并且所有过程需要一分钟以上。
一种解决方案是让这些客户端视图将其配置规范设置为以下内容:
element * .../myBranch/FREEZED_LATEST
element * .../myBranch/LATEST
如果您不进行原子变更集提交,则标签FREEZED_LATEST
不存在,并且所有客户端视图都显示 LATEST,因为它们应该。任何签到都会立即被所有人看到。
但是在您的原子提交期间,您可以:
FREEZED_LATEST
(所有客户端继续看到由您的原子操作产生的新 LATEST,并且可以制作带有自己的一些结帐的新版本)使用 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
锁定所有其他用户。
备份您的服务器。
做你的承诺。
如果出现严重错误,请从备份中恢复 clearcase。
我已经很多年没有使用 clearcase 了,所以这里有一些杂散和幼稚的想法。
向前看并确定文件是否不同步。
我会在签入之前锁定您要签入的所有文件,如果您未能锁定其中一个,则中止整个混乱,并提供有用的消息。
你可以“删除”签到吗?或者revert,所以HEAD看的是以前的版本?定义您对签入的撤消。
你能做一个临时分支,签入,然后合并/变基(我的术语在这里丢失)。这样你的回滚就是杀死分支。虽然我记得同事们因为它的分支而诅咒 clearcase。
通常,排队操作很棒,但使用队列可以在潜在问题发生之前识别它们。此外,定义你的动作和他们的 UNDO 标准,所以如果他们想做一些不是伪原子的事情,你可以警告他们,“这可能会变得一团糟”。