【问题标题】:Team Foundation Server branching characteristics, compared to othersTeam Foundation Server 分支特征,与其他相比
【发布时间】:2009-12-30 12:00:53
【问题描述】:

TFS 的分支特性是什么?


早期分支/重度分支

如果我们查看工具 Perforce、Subversion、CVS,例如,我们会看到分支正在获取主干的副本。它是“早期分支”所有定义为分支的文件,无论这些文件是否在该分支中更改。

这种方法在决定为整个文件树创建分支时开始创建新版本的文件。

最大的缺点之一是,在该分支之外(通常在主干中)所做的任何更改,如果您想带入分支,都需要将每个文件合并到这些文件内部,因为它们已经“早期分支”。

延迟分支/廉价分支

与较新的工具(例如 ClearCase、Plastic SCM、AccuRev、Mercurial、Git)相比,我们看到了较晚(便宜)的分支策略。

我们看到分支中的第一个新版本只有在文件签入分支时才会创建。

这意味着当您希望重新定位到您的分支的主干上发生更改时,不会发生未更改文件的合并。

TFS 的行为如何?


警告:我注意到当我们考虑 DVCS 工具时,我的术语并不准确。我认识到 Perforce 有一种迂回的方式来覆盖视图,但它不是在没有大量工作的情况下完成的。

【问题讨论】:

    标签: git version-control tfs mercurial clearcase


    【解决方案1】:

    注意:Version Control (ex Branching and Merging) Guide 可以在这里提供帮助。

    TFS Branching Guide - Lab.zip 文件的“Single Dev Team Scenario 2.0.pdf”文档中,您将看到在创建分支之后进行提交(检查原始分支中的所有文件。
    使用的空间被最小化,如Isolation for Collaboration页面所述:

    当您创建新分支并提交时,新分支中与源分支中的文件相同的所有文件都指向相同的内容。
    结果是分支消耗的额外存储空间非常少,并且仅当分支文件与源文件不同时,存储空间才会扩展。
    即使文件发生更改,Team Foundation Server 也会使用差异引擎来分析文件之间的更改并再次优化存储空间。

    所以它是 TFS2008 的繁重分支(带有空间优化)。

    在 TFS2010 中,分支是第一类对象,很容易从简单的文件夹中分离出来。

    【讨论】:

    • 这至少是一个重大改进。他们网站上的分支计划还很不成熟。示例是有一个名为 dev 的分支和一个名为 release 的分支,并且很少提及退休它们。例如,最好在每个版本上创建新分支,以使合并算法更容易正确处理,并拥有一个不到 3 年的共同祖先。
    • 实际上有很多非常有用和详细的指导@codeplex.com/BranchingGuidance。上面提到的网站是对我在这里提到的原始指南的重新访问。所有实现分支的技术都适用于版本控制系统。一些系统使这些技术的某些方面比其他系统更容易,但它们通常可以在整个应用中得到应用。
    • @Ryan Cromwell 感谢您提供其他链接。我现在在我编辑的答案中参考这两个指南。
    • @polyglot:我完全同意你的分析。 TFS 分支模型不是最优的,至少可以说 ;)
    • @AmittaiShapira 感谢您的编辑,更新该链接。
    【解决方案2】:

    我听说 TFS 比后者更接近前者。

    【讨论】:

    • 这是非常正确的——TFS 中的一个分支“需要一段时间”,因为没有更好的词。它们很重。
    【解决方案3】:

    我在 TFS 上工作了 5 年,最近在去年切换到 GIT。

    TFS(与 GIT 相比)有两个主要缺点:

    1) 没有 Rebase 概念。所有分支到分支的交互都是合并的。合并破坏者变更集历史,并隐藏提交 cmets 中的所有有用细节。没有樱桃采摘,没有时间线重建。这导致了无休止的父进程,以及确定变更集历史的认真研究。

    2) 毫无根据的合并是一场噩梦。在 TFS 中,如果您在 6 个月前没有碰巧建立分支关系,您将不得不多次反向/正向集成才能到达目标主干。在 git 中,所有的 trunks 都是兼容的。

    TFS 有效,但有障碍。一些障碍确实影响了我们的交付时间。

    到目前为止,我们一直在敏捷团队环境中使用 GIT 做一些非常先进的事情,并且始终能够在几分钟内而不是几小时或几天通过解决方案来解决每个新的源问题。促销层是抽象的,可以临时交换。开发人员可以“节点到节点”共享变更集,并在推送到公共存储库之前协作开展工作。

    没有冒犯 MS,但我无法支持一个开箱即用的工具。

    【讨论】:

      【解决方案4】:

      当您在 tfs 2008 中创建分支时,您必须首先签入新的分支文件。一旦您在分支的版本控制中检查它们,就会与原始分支分开。 您还可以在分支文件被分支之前跟踪它们的历史记录,但您需要安装TFS Follow Branch History Add-in for VS

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-31
        • 2012-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多