我有一个项目,我需要在动态视图上执行许多操作。如果这些操作中的任何一个失败,或者程序中出现了一些错误,我需要能够撤销提交。
直接的方式似乎是简单地将命令放入队列中,然后,当我的程序完成处理时,执行队列。但是,我担心一些异常事件会中断提交并导致服务器上的数据集不一致。
或者,换句话说,我正在寻找一种在Clearcase动态视图中创建svn风格的“变更集”的方法。我正在使用的脚本语言是Perl,如果重要的话。
想法?
答案 0 :(得分:5)
ClearCase中的操作原子性在文件级别,没有严格等同于svn changeset(即“修订版”)。
ClearCase中最接近变更集的是活动的概念(在UCM中),或者在文件集合上设置的标签(UCM基线实际上更接近,因为它代表了你无法移动的标签,在预定义的文件集 - UCM组件 - )
现在,UCM与否,我建议:
如果遇到问题,当分支仍处于锁定状态时,您可以'ct rmver
'添加版本。 (注意:谨慎使用:rmver
无法撤消)
注意1:如果您不在UCM工作,则必须记录所有已签入的版本以便能够对其进行操作
注2:当我说“锁定分支”时,我的意思当然是:“为除了你以外的所有人锁定”(-nusers yourLogin
)。这样,只有你可以制作签到(适用于你工作的分支机构(主要或其他)的LATEST中的所有文件。
使用这种方法的问题是,客户端(在分支上的LATEST中具有动态视图的其他用户)将在原子事务期间看到。登记/> 由于这些是动态视图,因此当这些文件逐个签入时,它们将看到签入的文件。这可能不太好,特别是如果有200个文件,并且所有过程都需要超过一分钟。
一种解决方案是让这些客户端视图将其配置规范设置为以下内容:
element * .../myBranch/FREEZED_LATEST
element * .../myBranch/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标准,所以如果他们想要做一些非伪原子的事情,你可以警告他们,“这可能会变得混乱”。