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

3
我在工作中使用ClearCase,现在我想找出哪些文件已被修改但未合并。我们在ClearCase中有一个主分支,这是最高级别的分支,所有源代码更改都会合并到这里,并从这里进行正式的发布构建。然后,在主分支下面有一个集成分支,用于解决集成问题。当我们在集成分支中测试完毕后,将集成分支合并到主分支中。对于单个特性实现和错误修复,我们会创建一个新的分支(通常以动作、特性或错误修复命名),然后解决问题。完成后,我们将该更改合并到集成分支。
我想知道是否有任何命令或方法可以查看在特性/错误修复分支中已修改但未合并回集成分支的文件。我一直在寻找,但似乎找不到方法。我希望能够运行命令并告诉我所有子分支中已修改但未合并的所有文件。谢谢。
2个回答

4

如果你知道源分支和目标分支(在Jonathan答案中有详细介绍,我已经点赞了),那么不要忘记查询原语合并

merge (from-location , to-location)

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

此主题说明了该查询的实现:

在特定分支上查找所有已签入且未合并的元素是否可能?

cleartool find \\view\administration\ProjectVOB \
   -branch "brtype(HNH-372452) && \
   !merge(...\HNH-372452\LATEST,...\main-372452\LATEST)" -print

\\view\administration\ProjectVOB\Com-API\Dll\COMFrontendDll\Mmi.cpp@@\main\HNH-372452
\\view\administration\ProjectVOB\geometry\geochain\geocutterloc.cpp@@\main\HNH-372452

“合并超链接”是版本树中您看到的红色箭头:
(请参阅文章“需求的版本控制和并行开发”)

red arrow in version tree


3
通常,您使用ct findmerge从一个分支或视图中查找要合并到当前视图中的文件(假设ctcleartool的别名)。
我认为您需要识别您感兴趣的所有分支,并为每个目标分支执行单独的ct findmerge操作。这很复杂。您还想能够消除已知已完全合并的许多分支。您可以注释一个分支以指示它已完全合并。
因此,我认为没有一个简单的单一命令来完成这项工作。
您需要决定哪些分支是您关心的目标。这些将是您的集成分支。假定您有一个相当小的列表。
对于每个目标分支,您需要决定哪些工作分支与该集成分支相关。这是棘手的部分;没有一种简单的方法可以使用VOBs中的信息确定特定的错误修复或功能分支是否与该集成分支相关;这实际上只有用户知道。
然后,您需要一个脚本执行以下操作(概述):
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_branches和list_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 mkattype, ct mkattr)(可能是“目标集成分支”属性类型,枚举类型),你可以用它来指导你。这使得你面临一个改装问题;如何将正确的属性添加到每个现有的工作分支上。你还需要一个单独的属性来识别不再需要合并审查的分支,除非你决定缺少“目标集成分支”属性意味着“不再需要审查”。这可以将升级问题减少到将目标集成分支添加到仍需要合并的分支上;默认情况下,所有现有的分支都将被视为已完全合并。


我感激你的帮助。我不应该把它限制在“一个命令”上。也许有可能编写一个脚本来完成这个任务吗? - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接