在ClearCase中查找所有未合并的文件/元素

时间:2011-09-18 16:42:26

标签: merge clearcase

我在工作的地方使用ClearCase,我正在试图找出如何查找已修改但未合并的文件。我们在ClearCase的最顶层有一个主分支,这是最终源代码更改合并到我们正式发布版本的地方。然后,我们在main下面有一个集成分支,用于解决集成问题。当我们在集成分支中完成所有工作并进行测试时,我们将集成分支合并到main。对于单个功能实现和错误修复,我们在集成分支之外创建一个新分支(通常以动作,功能或错误修复命名)并解决问题。当我们完成它时,我们将该更改合并到集成分支。

我想知道是否有人知道某个命令或方法,以查看功能/错误修复分支中修改了哪些文件但未合并回到集成分支。我一直在四处寻找,但我似乎无法找到办法。我希望能够运行该命令并让它告诉我所有已在所有子分支上修改但未合并的文件。感谢。

2 个答案:

答案 0 :(得分:3)

通常,您使用ct findmerge查找要从一个分支或视图合并到当前视图的文件(假设ctcleartool的别名)。

我认为您必须为每个目标分支识别您感兴趣的所有分支并为每个分支执行单独的ct findmerge操作。那太复杂了。您还希望能够消除许多已知完全合并的分支。您可以注释分支以指示它已完全合并。

所以,我认为没有简单的单一命令来完成这项工作。


您需要确定哪些分支是您关注的目标。这些将是您的集成分支。据推测,你有一个相当小的列表。

对于每个目标分支,您需要确定哪些工作分支与该集成分支相关。这是棘手的部分;没有简单的方法可以使用VOB中的信息确定特定的错误修复或功能分支是否与该集成分支相关;它实际上只有用户知道。

然后你需要一个(概述)的脚本:

for int_branch in $(list_relevant_integration_branches)
do
    ...create view with tag $tag for $int_branch...
    ct setcs -f $(cspec_for_integration_branch $int_branch) $tag
    ct setview -exec "find_outstanding_merges_for_integration_branch $int_branch" $tag
done

find_outstanding_merges_for_integration_branch看起来有点像:

vob_list=$(list_relevant_vobs)
for mrg_branch in $(list_relevant_merge_branches $int_branch)
do
    echo
    echo "Merges from $mrg_branch to $int_branch"
    ct findmerge $vob_list -fversion .../$mrg_branch/LATEST -print
done

请注意,此命令假设(a)当前视图适用于目标,(b)集成分支名称作为参数传递。

您可以看中并决定如何处理自动或图形合并而不是-print。困难的部分仍然是未编写的命令,例如list_relevant_integration_brancheslist_relevant_vobs。这些可能很简单:

# list_relevant_integration_branches
cat <<EOF
integration_branch_version_3_0
integration_branch_version_3_1
integration_branch_version_4_0
EOF

# list_relevant_vobs
cat <<EOF
/vobs/mainproject
/vobs/altproject
/vobs/universal
EOF

或者它们可能要复杂得多。 (如果你只有一个VOB,那么你的生活就会简单得多;我们使用的系统在cspec中可以看到20多个VOB。)

另一个未经编写的脚本是list_relevant_merge_branches。我不知道是否有一种简单的方法可以写出来。如果在创建开发分支时定义并应用适当的属性类型(ct mkattypect mkattr)(可能是“目标集成分支”属性类型,枚举类型),您可以使用它来指导您。这让你有一个改造问题;如何在每个现有工作分支上获取正确的属性。您还需要一个单独的属性来识别不再需要合并审查的分支,除非您确定缺少“目标集成分支”属性意味着“不再需要仔细检查”。这减少了将目标集成分支添加到仍需要合并的分支的改进问题;默认情况下,所有现有分支都将被视为完全合并。

答案 1 :(得分:3)

如果您知道源分支和目标分支(Jonathananswer详细说明的主题,我已经投票),那么请不要忘记query primitive 合并< /强>:

merge (from-location , to-location)
  

在所有情况下,TRUE如果对象所属的元素具有连接Merge和{的合并超链接(默认名称:from-location) {1}}。
  您可以使用分支路径名或版本选择器指定其中一个或两个位置   如果合并超链接涉及该分支上的任何版本,则指定分支将生成to-location   分支路径名必须完整(例如,TRUE,而不是/main/rel2_bugfix)。

This thread说明了该行动中的查询:

  
    

如何找到已签入但未合并的特定分支上的所有元素?

  
rel2_bugfix

“合并超链接”是您在版本树中看到的红色箭头:
(参见文章“Versioning and parallel development of requirements”)

red arrow in version tree