如何在Clearcase中查找分支的父标签

时间:2010-02-28 20:48:59

标签: clearcase

我为子分支创建了一个视图。对于给定的子分支名称,是否可以找出父分支和从中创建子分支的基本标签?

3 个答案:

答案 0 :(得分:2)

您的问题没有一个简单的答案,因为这些概念不一定适用。这意味着答案也必须深入研究背景。

配置规范是了解事物当前如何工作的关键(catcs)。查看实际的文件版本名称和版本历史记录(describe,lshistory)是理解创建分支或版本时事情是如何工作的关键的其余部分。

分支独立于其上的文件而存在。对于不同的文件,相同的分支名称可能出现在分支结构中的不同位置。分支不一定是从文件的标记版本创建的(尽管有时是)。同样,标签的存在与标记的文件无关。

例如,考虑一下我本来应该审查的文件(名字伪装,但具有代表性):

  • xyzscan.c @@ /主/ TEMP.newfeat.it1 / TEMP.newfeat.it2 / TEMP.newfeat.it3 / 3

通过深入研究历史,我可以看到TEMP.newfeat.it1分支是从版本xyzscan.c @@ / main / 89创建的;这不是标签版本,因为之前的修订包使用了xyzscan.c @@ / main / 88(标记为product-6.54.03,其中包括;多个版本的文件没有更改,更不用说修改包了)。 / 89版本是自上一个标记版本以来的(次要)错误修复。

此特定新功能已经进行了3次迭代。当前的配置规范看起来有点像:

element * CHECKEDOUT

element * .../TEMP.newfeat.it3/LATEST
mkbranch TEMP.newfeat.it3 -override

element * .../TEMP.newfeat.it2/LATEST
mkbranch TEMP.newfeat.it2 -override  # Redundant

element * .../TEMP.newfeat.it1/LATEST
mkbranch TEMP.newfeat.it1 -override  # Redundant

element /vobs/product/...    /main/LATEST
include /atria_release/cspecs/otherprod/2.34/otherprod-2.34.05
element * /main/LATEST

第二个和第三个'mkbranch'行现在是多余的,但是当它们的分支是最新的时候是相关的。

TEMP上没有标签。*我们的方案下的分支机构(普通工程师不允许创建不启动“TEMP”的分支机构;这是由触发器脚本强制执行的。)

每次迭代都修改了xyzscan.c文件。使用'describe',我可以看到:

  • xyzscan.c @@ / main / TEMP.newfeat.it1 / TEMP.newfeat.it2 / TEMP.newfeat.it3 / 0从 xyzscan.c @@ /主/ TEMP.newfeat.it1 / TEMP.newfeat.it2 / 2

  • xyzscan.c @@ / main / TEMP.newfeat.it1 / TEMP.newfeat.it2 / 0从xyzscan.c @@ / main / TEMP.newfeat.it1 / 7分支。

但如果我看另一个文件:

  • xyzread.c @@ /主// TEMP.newfeat.it3 / 1

我可以看到,直到迭代3才修改它 - 此文件没有分支TEMP.newfeat.it1或TEMP.newfeat.it2。此外,这不是问题。


问题是:

  

我为子分支创建了一个视图。对于给定的子分支名称,是否可以找到父分支和从中创建子分支的基本标签。

给定视图中的文件,您可以运行'cleartool describe',可能使用'-s'(短)选项来获取其版本号。在我的例子中,可能是:

  • xyzscan.c @@ /主/ TEMP.newfeat.it1 / TEMP.newfeat.it2 / TEMP.newfeat.it3 / 3

要找出分支的位置,您需要查看分支上的'/ 0'版本,其内容与分支TEMP.newfeat.it2上的版本相同。然后,您需要查看'/ 0'版本的完整描述,以查看先前版本的内容('-s'现在没有帮助)。这就是我发现前一版本的原因:

  • xyzscan.c @@ /主/ TEMP.newfeat.it1 / TEMP.newfeat.it2 / 2

重复倒退。您可以在“describe”的(完整)输出中看到适用于TEMP.newfeat.it3分支的版本的标签。但是,自创建分支以来,这些标签可能已应用。

一般情况下(虽然不在示例中),在TEMP.newfeat.it3分支的版本之后,分支上可能有更高版本,例如TEMP.newfeat.it2。这总是会导致TEMP.newfeat.it2分支上的额外更改是否需要合并到TEMP.newfeat.it3分支的问题 - 幸运的是,ClearCase非常适合合并和合并跟踪。

答案 1 :(得分:2)

可以从该视图中存在的任何版本创建分支,如配置规范所指定 起点可以是标签,也可以是其他标准的版本参考(日期,来自其他分支的LATEST等)

总之:你做不到; ClearCase是基于文件的,而不是基于存储库的 这意味着您可以决定从给定视图选择的每个文件的不同条件开始分支。

现在,如果您的视图中已经修改了一个文件(即具有新分支的文件),您可以:

 cleartool descr -l myFile

应该为您提供文件的扩展路径名:

 myFile@@/main/parentBranch/myBranch

新的当前分支之前的分支名称是您要查找的内容 您可以确定给定文件。

答案 2 :(得分:1)

您的子分支将基于什么分支,标签或版本由config_spec确定。尝试运行cleartool catcs -tag <your_view_name> | grep -2 <your_child_branch_name>,这应该在前后两行给出上下文。 config_spec的外观如何变化[1],所以我不能说只是greping就足够了。

如果你想学习和理解你可能想要检查整个config_spec。 在您的视图中,您可以运行cleartool ls [file(s)]Rule: ...部分将参考config_spec中应用的内容。

[1] 当我12年前开始使用clearcase时,我们手工编辑了几行,今天它是由一个工具生成的,并且是数百(或数千?)行。