C# 不正确的TFS分支策略-如何修复

C# 不正确的TFS分支策略-如何修复,c#,version-control,tfs,merge,branch,C#,Version Control,Tfs,Merge,Branch,看起来我们最终将项目转移到了一个糟糕的分支策略——“级联”(问题是“它实际上是可行的”)。现在,在读了几篇文章并看到它导致无限分支树之后,我意识到它是不好的,我想修复它。但这并不像我想象的那么容易。TFS只允许与父分支合并(不可能合并同级分支) 以下是我们当前分支机构层次结构的图表: 看起来很奇怪,但都是从最新的发布> /代码>分支开始的,而中继线在3个月的工作中被暂停了。然后,我们在前一个版本(直到1.1.4)的基础上发布了一些Intermediate版本。但是,当我们开始发布1.2.0时,

看起来我们最终将项目转移到了一个糟糕的分支策略——“级联”(问题是“它实际上是可行的”)。现在,在读了几篇文章并看到它导致无限分支树之后,我意识到它是不好的,我想修复它。但这并不像我想象的那么容易。TFS只允许与父分支合并(不可能合并同级分支)

以下是我们当前分支机构层次结构的图表:

看起来很奇怪,但都是从最新的<代码>发布> /代码>分支开始的,而中继线在3个月的工作中被暂停了。然后,我们在前一个版本(直到1.1.4)的基础上发布了一些Intermediate版本。但是,当我们开始发布1.2.0时,

trunk
的故事重复了,我们必须暂停1.2.0并实施1.1.5修补程序

现在,我面临着将1.1.5更改合并到1.2.0分支的需要,这是不可能直接实现的。我只能合并1.1.5和1.1.4,这是我想要避免的(谁知道明天我们可能需要在1.1.4的基础上实现1.1.6)。但我似乎没有别的出路。仍然可以从1.1.4的非最新版本创建1.1.6分支

这是我必须做的吗?难道没有更好的出路吗?

现在是大麻烦和主要问题。最后,我需要将所有更改合并到
主干中。而1.1.5-1.2.0问题只是这个问题的一个缩影。这就是为什么我要用一种最佳且风险最小的方式来执行这个合并

我目前的计划如下:

  • 使用最新的稳定发布版本创建分支“1.1.4最终版”
  • 可选:为所有先前编号的版本创建类似的最终分支。我应该这样做吗?很可能我以后不再需要那个版本了
  • 将1.1.5合并为1.1.4
  • 将1.1.4合并到1.2.0中。1.1.5中没有太多的变化,所以我不应该在这里遇到问题
  • 将1.1.4合并为1.1.3、1.1.2,并向下至
    发布
    分支我应该期待这里的冲突或问题吗?我期待并且希望不会
  • release
    合并到
    trunk
    中。最可怕的部分=)
  • 稳定
    行李箱中的代码
  • 现在是时候创建一个更好的分支策略了。。。目前我对这部分很不确定
  • 从主干创建新的“
    stable
    ”(主)分支
  • 重新分配
    trunk
    以成为
    stable
    的子对象。相关问题“”中建议了此解决方案
  • 我应该删除当前的“
    release
    ”和“
    R***
    ”分支,还是将它们作为垃圾处理?
  • 对于下一个提交版本,不要创建单独的分支,而是在stable branch中标记最终版本。实际上“
    stable
    ”分支将只包含最终版本签入
  • 我不打算为稳定特性的QA创建“
    集成
    ”分支——目前我们都生活在一个活动分支中,没有问题
  • 基于
    stable
    为并行开发创建“
    alternate
    ”分支,以防我们需要再次暂停当前工作以进行紧急修复。我应该永远保留一个备用分支,还是在合并后删除它并在需要时创建一个新分支(如R125)
  • 这种改变的想法是有固定数量的分支(理想情况下是2个,最多3-4个)


    请分享您对我的策略的想法和担忧,或提出更好的策略。我这样问是因为我不确定这一切是否会像我预期的那样有效,不知道这是否是最简单的方法,而且错误的代价是巨大的。

    你的合并策略在我看来还行,但我会尝试用三个分支图来完成

    我们使用三个分支:开发、测试、发布

    大多数构建都来自dev,并带有标签。(与图中的主干相同)。 然后我们将其转移到qa并继续开发。 如果有问题\ bug,并且开发分支在未来的开发中,我们将测试分支设置为标签,并修复测试分支上的问题,并将其合并到开发分支,然后再次使用标签。 如果我们在生产中遇到问题,我们会使用发布分支上的标签来修复问题,给它贴上标签,当然也会将它合并到dev。 这是如何使用三个分支完成的

    当然,您可以始终使用特性分支来处理长特性和非特定特性

    这是我必须做的吗?难道没有更好的出路吗

    我会仔细地将
    release
    下分支的所有更改合并到
    trunk
    中。我一次只做一个分支,合并“所有更改到特定版本”,然后选择“所有最新版本”。这将为您提供一个包含所有版本更改的主干

    我应该期待冲突或问题吗

    您可能会遇到冲突,但只要小心一点并对历史进行一些法医调查,您就可以将更改输入到您的
    主干中

    处理发布分支(即使与
    主干
    没有直接关系的分支)时的正常过程是签入发布分支,然后到RI(反向集成)将更改合并回
    主干
    。有些人喜欢先签入
    trunk
    ,然后合并到发布分支中,以避免
    trunk
    可能被遗忘的情况。这是一个六个,另一个六个

    我应该删除当前的“release”和“R***”分支,还是将它们作为垃圾

    我不认为这有什么关系,如果你想隐藏它们,你可以将它们移动到一个名为
    过时版本
    的文件夹中,或者直接删除它们-TFS删除是软的

    请分享您对我的策略的想法和担忧,或提出更好的策略

    我不会创建一个
    稳定的
    。一旦我把所有的东西都放在行李箱里,我会很高兴的
    
    Start -----L:R1-----C->
    
    Start -----L:R1-----C->
               |    /
         B:R1  |--C/