2011-09-18 50 views
3

我们使用ClearCase的,我的工作,我试图找出如何找到已修改但尚未合并的任何文件。我们在ClearCase的最高级别有一个主分支,这是最终源代码更改合并到我们正式发布版本的位置。然后,我们有一个主要集成分支,在这个分支中可以计算出集成问题当我们在集成分支中完成所有工作和测试时,我们将集成分支合并到main。对于单个功能实现和错误修复,我们创建了一个新的分支(通常以一个动作,功能或错误修正命名)在集成分支之外,并解决问题。当我们完成它时,我们将该更改合并到集成分支。找到所有未合并的文件/元素在ClearCase中

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

回答

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 

注意,这个命令假设(一)目前的观点是适当的(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 mkattype,ct mkattr),则可以使用它来指导您。这给你带来了一个翻新问题。如何在每个现有工作分支上获得正确的属性。您还需要一个单独的属性来识别不再需要合并审查的分支,除非您确定缺少“目标集成分支”属性意味着“不需要再仔细检查”。这减少了改造问题,将目标集成分支添加到仍然需要合并的那些分支;默认情况下,所有现有分支机构将被视为完全合并。

+0

我欣赏的帮助。我不应该把它限制在“一个命令”上。有可能有一个脚本可以做到这一点吗? – Chris

3

如果你知道的源和目标分支(主题Jonathananswer,我已经upvoted详细介绍),然后别忘了query primitive合并

merge (from-location , to-location) 

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

This thread说明的行动,查询:

怎么可能发现,在检查,没有合并掉是某一分支的所有元素?

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

\\view\administration\ProjectVOB\Com-API\Dll\COMFrontendDll\[email protected]@\main\HNH-372452 
\\view\administration\ProjectVOB\geometry\geochain\[email protected]@\main\HNH-372452 

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

red arrow in version tree

相关问题