3

我之前已经记录了我对 Clearcase 作为源代码控制系统的看法,但不幸的是我仍在使用它。所以我求助于你们来帮助我减轻我的挫败感之一。

我们刚刚从每个开发人员一个分支系统转变为每个任务一个分支系统,以尝试改善我们在确定某些文件更改的原因时遇到的一些问题。一般来说,我对解决方案感到满意,但有一个主要问题。我们使用简单的脚本来启动和结束任务,这些任务创建一个以用户名和任务编号命名的新分支,然后更新本地快照视图以具有类似于以下的配置规范:

    元素 * 结帐
    元素 * .../martin_2322/LATEST  
    元素 * /main/LATEST -mkbranch martin_2322
    加载/项目/应用程序

假设我的项目有两个耦合文件 A.cs 和 B.cs。对于我的第一个任务,我在分支上对 A 进行了更改。然后无论出于何种原因,我都需要停止处理任务 2322 并开始处理任务 2345(任务 2322 尚未完成,因此我不会将其合并回主任务)。我创建了一个新的任务分支 2345,编辑 A.cs 和 B.cs 并将结果合并回 main。现在我回到 2322 上工作,所以我将我的配置规范改回上面定义的配置规范。此时,我从任务分支中看到了 A.cs 文件(正如我之前编辑的那样,所以我得到了该分支的本地版本)和最新的来自 main 的 B.cs 版本。由于我没有对 2345 分支上的 A.cs 进行更改,因此构建中断。相反,我需要的是能够从我离开的地方拿起任务 2322 并使用旧版本的 A.cs 来查看它 - 这是创建分支时 main 中最新的版本。

我看到它的方式我有几个选项来解决这个问题:

  • 更改配置规范,以便它在正确的日期从 main 获取文件。如果我知道日期并且不介意手动设置它,这很容易做到,但我不知道如何将它自动化到我们的任务切换脚本中。反正有没有得到一个分支的创建日期?

  • 为 main 上的每个分支创建一个标签。理论上做起来很简单,但是我们安装的 CC 中的标签系统已经在几百个标签的重压下崩溃了,所以我不知道它是否可以处理每个分支的每个开发人员(请注意我的示例中的任务是 2322,我们只完成了项目的四分之一)

  • 从主分支合并到任务分支。再次应该可以工作,但是长时间运行的分支将不仅包含为该任务更改的文件,还包含所有需要合并以使不相关的事情正常工作的文件。这使得它们与每个开发人员的分支方法一样复杂。我想查看哪些文件被更改以完成特定任务。

我希望我只是在这里遗漏了一些东西,并且有一种方法可以设置我的配置规范,以便它从 main 检索预期的文件,而无需笨拙的解决方法。那么,你们如何在 Clearcase 中进行分支?

4

3 回答 3

4

几点评论:

  • 每个任务的分支是在“工作单元”中修改一组文件的正确粒度。如果“任务”不是太窄,否则你最终会得到一大堆分支(及其相关的合并)

  • 当您为分支创建配置规范时,您显然忘记了元素的行(您“添加到源代码管理”的行)

  • 另外,您可以考虑为修复起点进行分支,这将解决“A.cs 的旧版本 - 创建分支时 main 中最新的版本”位。
    我知道您已经有太多标签,但是您可以有一个脚本来“关闭”一项任务,该任务将(除其他外)删除该起始标签,避免标签混乱。

这是我将使用的配置规范:

element * CHECKEDOUT 
element * .../martin_2322/LATEST  
element * STARTING_LABEL_2322 -mkbranch martin_2322 
# selection rule for new "added to source control" file
element * /main/0 -mkbranch martin_2322 
load /Project/Application

我会发现这比计算分支的日期要容易得多。

  • 不要忘记您可以将您的任务合并回主任务,并将您完成的任务分支中的一些文件合并到新的当前任务分支,如果您还需要将一些修复改回该当前任务。
于 2009-06-15T18:31:49.910 回答
2

您可以使用cleartool中的describe命令获取分支的创建日期。

cleartool describe -fmt "%d" -type martin_2322

这将打印出创建分支的日期和时间。您可以使用它来实现您的第一个选项。有关更多信息,您可以阅读以下 cleartool 手册页,但希望上述命令是您所需要的。

cleartool man describe

cleartool man fmt_ccase
于 2009-06-15T15:21:36.073 回答
1

我们使用 Clearcase,我们发现为发布创建分支通常比按任务完成要容易得多。如果您确实按任务创建它,那么我将为该版本创建一个“主分支”,并将任务从该分支分支出来,然后在完成后将它们合并回来以将它们合并回主干。

于 2009-06-15T14:35:15.560 回答