【问题标题】:Base ClearCase- Prevent merge from a specific branchBase ClearCase - 防止从特定分支合并
【发布时间】:2016-01-12 22:56:23
【问题描述】:

有人可以指导我以正确和最佳的方式处理这个问题吗?我有两个活动的开发分支——在同一个代码库中被修改,一个集成分支在基本的 clearcase 环境中。但我想阻止代码从分支 2 升级到集成分支,只允许从分支 1 合并到集成分支。请指教。

【问题讨论】:

    标签: clearcase clearcase-ucm cleartool clearcase-remote-client clearcase-automation


    【解决方案1】:

    如果有不同的用户从开发流交付到集成流,您可以(使用cleartool lock -nusers ... stream:aStream@\vobs\apvob):

    • 为除dev1 之外的所有人锁定devstream1(这样您就可以确定dev1 只能在devstream1 上工作),
    • 为除dev2 之外的所有人锁定devstream2(这样您就可以确定dev2 只能在devstream2 上工作),
    • 为除您和dev1 之外的所有人锁定intstream(这样只有dev1 可以发送到intstream

    如果我或 dev1 错误地将代码从 devstream2 提升到 intstream 怎么办

    那么你需要一个preop deliver_start 触发器(带有mktrtype)。
    该触发器将控制触发器中流的 OID,因为它们是不可变的:cleartool describe -fmt %On <stream-name>
    如果其中一个是devstream2 的那个,触发器将错误退出,拒绝传递。

    【讨论】:

    • 感谢您的回复。我对您的回答有疑问,这正是我正在尝试解决的问题。如果我或 dev1 错误地将代码从 devstream2 提升到 intstream 会怎样。
    • @user2705120 我已经编辑了答案以解决您的评论。
    【解决方案2】:

    因为听起来您在使用 Base ClearCase,所以您可以使用 preop 'checkin' 触发器。触发器执行的脚本将查看即将签入的签出版本是否有任何传入的合并超链接。如果是,脚本可以验证超链接的“from”端是否来自 branch1,如果是,则以 0 状态退出。如果它来自任何其他分支,脚本将打印一条描述性错误消息并以非零状态退出(从而阻止签入)。

    创建触发器类型时,您可以将触发器的范围限制为有助于提高性能的集成分支(我将在下面的示例中将其称为“my_int_branch”)。命令行可能如下所示:

    % cleartool mktrtype -element -all -preop checkin -brtype my_int_branch -exec path_to_allow_branch1_merge_script  allow_branch1_merge
    

    在脚本中,您可以使用以下内容获取附加到已签出版本的合并超链接:

    cleartool describe -fmt '%[hlink:Merge]p\n' $CLEARCASE_PN
    

    如果有任何传入的合并超链接,每个超链接都会有一行,如下所示:

    "Merge@2877@/vobs/myvob" <- "/vobs/myvob/mydir/file.c@@/main/branch1/3"
    

    然后脚本只需验证“from”版本的外部分支是“branch1”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2011-08-31
      • 2011-12-30
      • 1970-01-01
      • 2013-11-14
      • 2011-11-20
      • 1970-01-01
      相关资源
      最近更新 更多