有人可以指导我以正确和最好的方式处理这个问题吗?我有两个活动的开发分支——在同一个代码库中被修改,一个集成分支在基本的 clearcase 环境中。但我想阻止代码从分支 2 升级到集成分支,只允许从分支 1 合并到集成分支。请指教。
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”。
如果有不同的用户从开发流交付到集成流,您可以(使用cleartool lock -nusers ... stream:aStream@\vobs\apvob
):
- 锁定
devstream1
所有除了dev1
(这样你肯定dev1
只能工作devstream1
), - 锁定
devstream2
所有除了dev2
(这样你肯定dev2
只能工作devstream2
), - 锁定
intstream
除您之外的所有人和dev1
(这种方式只能dev1
交付给intstream
)
如果我或 dev1 错误地将代码从 devstream2 提升到 intstream 怎么办
然后你需要一个preop deliver_start
触发器(带有mktrtype
)。
该触发器将控制触发器中流的 OID,因为它们是不可变的:cleartool describe -fmt %On <stream-name>
如果其中之一是 for devstream2
,触发器将错误退出,拒绝传递。