基本ClearCase-防止从特定分支合并

基本ClearCase-防止从特定分支合并,clearcase,clearcase-ucm,cleartool,clearcase-remote-client,clearcase-automation,Clearcase,Clearcase Ucm,Cleartool,Clearcase Remote Client,Clearcase Automation,有人能指导我以正确和最好的方式处理这个问题吗?我有两个活动的开发分支,在同一个代码库中正在修改,还有一个集成分支在基本clearcase环境中。但我想阻止代码从分支2升级到集成分支,只允许从分支1合并到集成分支。请告知 如果有不同的用户从开发流交付到集成流,您可以(使用): 锁定除dev1之外的所有dev1(这样您就可以确定dev1只能在devstream1上工作) 为除devstream2之外的所有对象锁定devstream2(这样您就可以确定devstream2只能在devstream2上

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

如果有不同的用户从开发流交付到集成流,您可以(使用):

  • 锁定除
    dev1
    之外的所有
    dev1
    (这样您就可以确定
    dev1
    只能在
    devstream1
    上工作)
  • 为除
    devstream2
    之外的所有对象锁定
    devstream2
    (这样您就可以确定
    devstream2
    只能在
    devstream2
    上工作)
  • 锁定
    intstream
    ,除了您和
    dev1
    (这样只有
    dev1
    可以传递到
    intstream
如果我或dev1错误地将代码从devstream2提升到intstream呢

然后您需要一个
deliver\u start
触发器(带)。
该触发器将控制触发器中流的OID,因为它们是不可变的:
cleartool description-fmt%On


如果其中一个用于
devstream2
,触发器将错误退出,拒绝传递。

如果有不同的用户从开发流传递到集成流,您可以(使用):

  • 锁定除
    dev1
    之外的所有
    dev1
    (这样您就可以确定
    dev1
    只能在
    devstream1
    上工作)
  • 为除
    devstream2
    之外的所有对象锁定
    devstream2
    (这样您就可以确定
    devstream2
    只能在
    devstream2
    上工作)
  • 锁定
    intstream
    ,除了您和
    dev1
    (这样只有
    dev1
    可以传递到
    intstream
如果我或dev1错误地将代码从devstream2提升到intstream呢

然后您需要一个
deliver\u start
触发器(带)。
该触发器将控制触发器中流的OID,因为它们是不可变的:
cleartool description-fmt%On


如果其中一个是用于
devstream2
的,则触发器将错误退出,拒绝传递。

因为听起来像是在使用基本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
"Merge@2877@/vobs/myvob" <- "/vobs/myvob/mydir/file.c@@/main/branch1/3"
在脚本中,您可以通过以下方式获得附加到签出版本的合并超链接:

cleartool describe -fmt '%[hlink:Merge]p\n' $CLEARCASE_PN
如果有任何传入的合并超链接,则每个超链接将显示一行,如下所示:

% cleartool mktrtype -element -all -preop checkin -brtype my_int_branch -exec path_to_allow_branch1_merge_script  allow_branch1_merge
"Merge@2877@/vobs/myvob" <- "/vobs/myvob/mydir/file.c@@/main/branch1/3"

”Merge@2877@/vobs/myvob“因为听起来像是在使用基本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
"Merge@2877@/vobs/myvob" <- "/vobs/myvob/mydir/file.c@@/main/branch1/3"
在脚本中,您可以通过以下方式获得附加到签出版本的合并超链接:

cleartool describe -fmt '%[hlink:Merge]p\n' $CLEARCASE_PN
如果有任何传入的合并超链接,则每个超链接将显示一行,如下所示:

% cleartool mktrtype -element -all -preop checkin -brtype my_int_branch -exec path_to_allow_branch1_merge_script  allow_branch1_merge
"Merge@2877@/vobs/myvob" <- "/vobs/myvob/mydir/file.c@@/main/branch1/3"

”Merge@2877@/谢谢你的回复。我对你的回答有一个问题,这正是我想要解决的。如果我或dev1错误地将代码从devstream2升级到intstream,该怎么办。@user2705120我已编辑了答案以回应您的评论。谢谢您的回复。我对你的回答有一个问题,这正是我想要解决的。如果我或dev1错误地将代码从devstream2升级到intstream,该怎么办。@user2705120我已编辑了答案以解决您的评论。