在TFS中,我应该为生产发布创建标签还是分支?

11

在将代码部署到生产环境时,我应该给我的代码打标签还是为生产环境创建一个分支?

5个回答

19
在TFS中,我会创建一个发布分支,并使用标签来标识特定版本的生产发布。这意味着你可能拥有其他分支,我建议你采用以下方式:
- 三个主分支:Main(主分支)、Develop(开发分支)和Release(发布分支)。 - 一个Hotfix分支,用于当前紧急情况。 - 可以包含N个主要功能分支,以避免对开发造成干扰。
具体细节如下:
- Main分支:
- 包含最新稳定版本 - 对每个发布进行标记/标签 - Develop分支:
- 从Main分支创建出来 - 大部分工作都在这里完成 - 在发布之前合并回Main分支
- Release分支:
- 从以下其中一个分支创建出来: - Develop分支 - 或者Main分支(因为它是“稳定”的) - 此处进行Bug修复 - 经过测试和发布后, - 合并到Develop分支 - 或者合并到Main分支,然后进行向前集成(FI-从父级别的分支合并到其子级别的分支)到Develop分支 - 对每个发布或Bug修复进行标记/标签 - Hotfix分支:
- 从Main分支创建出来 - 合并回Main分支 - 进行向前集成的Merge到Develop分支 - 用于使Main保持“稳定”
- Major Feature分支:
- 从Develop分支创建出来 - 合并回Develop分支 - 用于处理可能会干扰常规开发路径的主要功能
参考资料:
  • 另一个关于栈溢出的问题:何时使用标签(label)和分支(branch),尤其是马丁·伍德沃德(Martin Woodward)的回答。
  • Eric Sink的源代码控制指南
  • Vincent Driessen的Git成功分支模型
    • 其中包含一个非常好的分支模型图形

  • 1
    虽然这是一些好的信息,但我觉得它实际上并没有回答所提出的问题。 - Code Maverick
    @CodeMaverick 很难判断,但它似乎以迂回的方式回答了问题。简而言之,根据他上面的详细信息,似乎他建议分支和特定的做法。 - Mike Guthrie
    1
    @CodeMaverick 我明白你的意思。我会将其编辑为更简洁的答案,并将其余部分降为支持信息。 - yeOldeDataSmythe
    GIT分支模型不会导致基于develop分支创建release分支,然后将其合并回develop和master分支时出现无根据的合并问题吗? - reggie

    3

    理想情况下,都需要。

    您可能希望拥有一个标签,以便您确切知道为特定版本提供了什么。但是,您可能还希望创建一个分支,以便对已发布的内容进行小的错误修复并创建新版本。


    5
    请参阅“Visual Studio Team Foundation Server分支和合并指南”以获取有关分支策略的优秀建议和详细信息。 - John Saunders

    1

    实际上,你可以采用以下两种方法之一:

    • 拥有一个连续的开发时间轴,每个生产版本都会分支:

    例如:

     ------------------------->dev
         |      |      |
         |      |      |
         |      |      |
        v1.0   v2.0   v3.0
    
    • 让您的生产发布“级联”:

    示例:

    ---->v1.0---->v2.0---->v3.0
    

    最终,选择采用哪种架构取决于您,只要它是一致的并且对您有意义。


    选项1的一个好处是你不必为每个新版本创建构建定义。你可以从主开发分支部署,就这样。一旦它被构建和部署,标记(即:创建一个新分支)新版本,以便在需要时可以回滚到它。 - Justin J Stark

    1
    您可以同时使用两种方法。以下是我们在所有项目中内部使用的方法。
    我们有一个包含分支文件夹和每个次要和主要版本的子文件夹的结构。我们还使用标签在每个子文件夹上设置,以便在未来任何时候轻松重建特定版本。
    $\Branches
        \2012.01
        \2012.02 (branched from 2012.01)
        \2012.03 (branched from 2012.02)
        \2013.01 (branched from 2012.03)
    

    您还可以查看Visual Studio团队基础架构服务器分支和合并指南以获取更多详细信息。

    0

    我见过两种方法,标记更轻量级,对我来说更容易。但是,有人指出标签可以相当容易地被删除。分支通过不实际删除而保护自己,除非“销毁”。我不喜欢使用分支的原因是我讨厌将它们隐藏起来,因为我倾向于从根目录获取最新版本,并且不想让所有这些分支填满我的硬盘。

    值得一提的是,由于有人指出标签可能会被删除,我已经将标记的权限从除管理员和构建服务帐户之外的所有人中删除,以帮助减轻这种情况。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接