Version control 带有私有分支的Clearcase配置规范

Version control 带有私有分支的Clearcase配置规范,version-control,clearcase,Version Control,Clearcase,我的工作有点复杂的分支结构(至少对我来说)。是这样的: Main | 1 | 2 | \ 3 \ Ver2 | 1 | \ 2 \ | ProjectA 3 | 1 主要 | 1. | 2. | \ 3 \ Ver2 | 1. | \ 2 \ |项目A 3 | 1. 从干管分出两条支管。“Ver2”和“ProjectA”是我的作品,每

我的工作有点复杂的分支结构(至少对我来说)。是这样的:

Main | 1 | 2 | \ 3 \ Ver2 | 1 | \ 2 \ | ProjectA 3 | 1 主要 | 1. | 2. | \ 3 \ Ver2 | 1. | \ 2 \ |项目A 3 | 1. 从干管分出两条支管。“Ver2”和“ProjectA”是我的作品,每个人都对下一个版本做了修改

我的问题是:有没有一种方法可以创建一个知道合并了什么的配置规范,这样我就可以:

  • ProjectA中未合并的任何内容
  • 如果ProjectA的最新版本已合并到Ver2,则从Ver2分支获取最新版本
  • 如果没有ProjectA分支,请从Ver2获取
  • 如果没有Ver2,则从MAIN获取

  • 例如,在上面的例子中,如果我在Ver2 branch中将版本1从ProjectA合并到版本2,那么我希望在Ver2上看到版本3。但是,如果我还没有合并这些文件,我希望在我的视图中使用ProjectA的版本1。

    我认为您不能这样做。不过,你能得到的是ProjectA的最新信息;在ProjectA中未更改的Ver2上的任何内容;以及在Ver2或ProjectA中未更改的主服务器上的任何内容。技巧的其余部分是确保所有必需的内容都已从Ver2或MAIN中合并。为此,您可以使用带有Ver2配置规范的引用视图(MAIN不需要配置规范,除非Ver2没有保持最新),然后在ProjectA视图中执行以下操作:

    cleartool findmerge . -fta view-tag-for-ver2 -merge
    
    -fta
    表示“来自标签”。当然,还有很多额外的选择


    这确保了ProjectA在版本2方面完全是最新的。

    我认为您不能这样做。不过,你能得到的是ProjectA的最新信息;在ProjectA中未更改的Ver2上的任何内容;以及在Ver2或ProjectA中未更改的主服务器上的任何内容。技巧的其余部分是确保所有必需的内容都已从Ver2或MAIN中合并。为此,您可以使用带有Ver2配置规范的引用视图(MAIN不需要配置规范,除非Ver2没有保持最新),然后在ProjectA视图中执行以下操作:

    cleartool findmerge . -fta view-tag-for-ver2 -merge
    
    -fta
    表示“来自标签”。当然,还有很多额外的选择


    这确保了ProjectA在版本2方面完全是最新的。

    您必须记住定义a的原因。
    隔离开发工作

    因此,为了更好地管理复杂的配置规范,您应该准确地知道“主”分支、v2分支和项目分支扮演什么角色

    例如,V2和项目A应该有两个不同的原因

    如果项目A是为了开发项目的当前版本,则应合并到V2分支,以允许对V2分支的某些当前开发进行改装

    通过这种推理,您不应该希望在同一个视图中看到“两者”:它们代表两组不同的文件,V2可能包含具有非常不同API的大型重构

    但是,如果您坚持这样的配置,您可以使用移动“MERGE_FROM_PA”标签的功能:每次将一些文件从项目a合并到V2分支时,您都会为每个合并的文件/目录重新设置“MERGE_FROM_PA”标签,将该标签从以前的V2版本移动到最新版本

    配置规范可以是:

    element * MERGE_FROM_PA
    element * .../ProjectA/LATEST
    element * .../V2/LATEST
    element * /main/LATEST
    
    但话说回来,这没有多大意义


    您需要定义要建模的不同开发工作,然后定义一个,使您的配置规范只关注其中一个环境。

    您必须记住定义一个的原因:
    隔离开发工作

    因此,为了更好地管理复杂的配置规范,您应该准确地知道“主”分支、v2分支和项目分支扮演什么角色

    例如,V2和项目A应该有两个不同的原因

    如果项目A是为了开发项目的当前版本,则应合并到V2分支,以允许对V2分支的某些当前开发进行改装

    通过这种推理,您不应该希望在同一个视图中看到“两者”:它们代表两组不同的文件,V2可能包含具有非常不同API的大型重构

    但是,如果您坚持这样的配置,您可以使用移动“MERGE_FROM_PA”标签的功能:每次将一些文件从项目a合并到V2分支时,您都会为每个合并的文件/目录重新设置“MERGE_FROM_PA”标签,将该标签从以前的V2版本移动到最新版本

    配置规范可以是:

    element * MERGE_FROM_PA
    element * .../ProjectA/LATEST
    element * .../V2/LATEST
    element * /main/LATEST
    
    但话说回来,这没有多大意义


    您需要定义要建模的不同开发工作,然后定义一个,从而允许配置规范只关注其中一个环境。

    为什么不?如果某个分支在某个地方被合并,则不使用该分支对我来说是有意义的

    以下是配置规范:

    element * {version(.../ProjectA/LATEST)&&!hltype(Merge,->)}
    element * {version(.../Ver2/LATEST)&&!hltype(Merge,->)}
    element * /main/LATEST
    

    是什么让这个工作流不连贯,只要你在构建之前对它进行标记?

    为什么不?如果某个分支在某个地方被合并,则不使用该分支对我来说是有意义的

    以下是配置规范:

    element * {version(.../ProjectA/LATEST)&&!hltype(Merge,->)}
    element * {version(.../Ver2/LATEST)&&!hltype(Merge,->)}
    element * /main/LATEST
    
    如果您在构建之前将其全部标记出来,那么是什么使得此工作流不连贯?

    感谢您的“已接受”标记。如果您需要有关合并工作流的进一步建议,请在我的答案上留下评论。谢谢您的“已接受”标记。如果您需要有关合并工作流的进一步建议,请在我的答案上留下评论。