我们有一个VOB,其中代码开发主要在
为了实现这一目标,我们使用以下配置规范:
这样做可以避免在检出文件或向ClearCase添加新文件时出现任何问题。但是,我们会遇到一个问题,即当另一位开发人员想要为仅具有“main”分支的文件执行“some_feature_set”分支的某些工作并检出此文件时,视图选择的版本将发生更改。
例如,假设使用上述配置规范,在我的视图中选择版本“/main/4”以供“some_file”使用。工作继续并行进行,并且由不同的开发人员创建了版本“/main/5”。配置规范中的“time”规则仍将选择版本“/main/4”。在稍后的某个时间点,另一位开发人员必须为“some_feature_set”执行某些工作,并设置具有类似配置规范但具有更新时间戳的自己的视图,以便选择版本“/main/5”的“some_file”。该开发人员必须对“some_file”进行一些更改并对其进行检出。这立即创建版本“/main/some_feature_set/0”和“/main/some_feature_set/some_other_sub_feature/0”。因为“/main/some_feature_set/0”现在存在,所以我的视图选择它。它的内容与之前其他开发人员检出文件时的情况相同,即与“/main/5”而不是“/main/4”。
有什么方法可以防止上述问题发生?
main
分支上进行。在某个时间点上,我们需要开发一些彼此紧密相关的新功能。为此,我们创建了一个新的分支,some_feature_set
。多个开发人员在此功能集上工作。每个开发人员都在自己的分支中工作,一旦确定某个子功能完成,就会将其合并回some_feature_set
。一旦完全实现了该功能集,计划将其合并到main
中。为了实现这一目标,我们使用以下配置规范:
element * CHECKEDOUT
element * /main/some_feature_set/some_sub_feature/LATEST
element * /main/some_feature_set/LATEST -mkbranch some_sub_feature
element * /main/LATEST -mkbranch some_feature_set
由于 some_sub_feature
的工作计划合并到 some_feature_set
中,我们的想法是在创建任务分支之前就从 some_feature_set
分支中分支出来。
我们的组织使用动态视图(无法更改)。为了保护我们免受其他开发人员对主分支和 some_feature_set
分支所做的更改可能会破坏子功能分支正在进行的工作,我们使用时间戳。因此,配置规范看起来像这样:
element * CHECKEDOUT
element * /main/some_feature_set/some_sub_feature/LATEST
mkbranch some_sub_feature
element * /main/some_feature_set/LATEST -time <some_time>
mkbranch some_feature_set
element * /main/LATEST -time <some_time>
end mkbranch
end mkbranch
当从main
检出文件时,会出现问题。ClearCase会将其分支到some_feature_set
,但由于没有规则选择新创建的版本,它将尝试再次分支并发出错误提示分支已存在。我们可以通过向配置规范添加更多规则来解决这个问题:
element * CHECKEDOUT
element * /main/some_feature_set/some_sub_feature/LATEST
mkbranch some_sub_feature
element * /main/some_feature_set/LATEST -time <some_time>
element * /main/some_feature_set/0
mkbranch some_feature_set
element * /main/LATEST -time <some_time>
element * /main/0
end mkbranch
end mkbranch
这样做可以避免在检出文件或向ClearCase添加新文件时出现任何问题。但是,我们会遇到一个问题,即当另一位开发人员想要为仅具有“main”分支的文件执行“some_feature_set”分支的某些工作并检出此文件时,视图选择的版本将发生更改。
例如,假设使用上述配置规范,在我的视图中选择版本“/main/4”以供“some_file”使用。工作继续并行进行,并且由不同的开发人员创建了版本“/main/5”。配置规范中的“time”规则仍将选择版本“/main/4”。在稍后的某个时间点,另一位开发人员必须为“some_feature_set”执行某些工作,并设置具有类似配置规范但具有更新时间戳的自己的视图,以便选择版本“/main/5”的“some_file”。该开发人员必须对“some_file”进行一些更改并对其进行检出。这立即创建版本“/main/some_feature_set/0”和“/main/some_feature_set/some_other_sub_feature/0”。因为“/main/some_feature_set/0”现在存在,所以我的视图选择它。它的内容与之前其他开发人员检出文件时的情况相同,即与“/main/5”而不是“/main/4”。
有什么方法可以防止上述问题发生?