clearcase - 如何最好地在 Clearcase 中分支?

标签 clearcase

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

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

    element * CHECKEDOUT 
    element * .../martin_2322/LATEST  
    element * /main/LATEST -mkbranch martin_2322 
    load /Project/Application

假设我的项目有两个耦合文件 A.cs 和 B.cs。对于我的第一个任务,我对分支上的 A 进行了更改。然后,无论出于何种原因,我都需要停止处理任务 2322,并开始处理任务 2345(任务 2322 尚未完成,因此我不会将其合并回 main)。 我创建了一个新的任务分支 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 中进行分支?

最佳答案

一些评论:

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

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

  • 此外,您还可以考虑为修复起点创建分支,这将解决“A.cs 的旧版本 - 创建分支时主程序中最新版本”这一问题。
    我知道您已经有太多标签,但您可以使用脚本来“关闭”任务,该任务会(除其他事项外)删除该起始标签,避免标签困惑。

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

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

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

  • 不要忘记您可以将您的任务合并回主任务,如果您需要改进您的修复,也可以将您完成的任务分支中的一些文件合并到您新的当前任务分支也回到当前的任务。

关于clearcase - 如何最好地在 Clearcase 中分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/996274/

相关文章:

ClearCase clearfsimport 使用未保留而不是保留

clearcase - 如何使用cleartool find获取包含特定字符串的文件?

java - 如何解决 CCRC View 更新期间的此错误?

c# - 在 Azure DevOps Repos 上拆分大型软件项目

clearcase - 如何使用 ClearCase 注释

version-control - 如何使用 ClearCase 执行递归结账?

linux - 使用 bash 从文本中获取特定字符串

clearcase - "re-cycling"是一个没有副作用的 ClearCase 动态 View 吗?如果不是,如何重命名 View ?

clearcase - Cleartool - 查找卸载/删除的文件