2017-07-20 99 views
2

多年来,我们一直使用TFS(TFVC)作为我们的版本控制系统。我们可能会迁移到git,但我试图找出分支策略 - 维护多个版本

1)是否有比我们当前使用的更明智的分支策略/模型,特别是用于维护多个生产版本(通常用于多个不同的版本顾客)?

2)至于1),是与git超过TFVC有具体的好处?

我们今天做的其实很简单:

Mainline ---------------------------------------------------- 
      |   |   |   |   |   
     Release 3 Release 4 Release 5 Release 6 "Release" 7 

所有版本都对主线自己的分公司,甚至在将来的版本的开发工作已经完成的“未来”的发布分支。在上文中,“第7版”正在进行中,尚未发布。

在每个分支都可能会进一步支行等功能分支隔离工作,并随时发布分支稳定的,但我不认为这是本次讨论的重要。

每当有这些版本分支之一的变化,它最终合并主线,并从那里到所有未来版本,以避免客户从,说要去回归,3版版本5

实际上,对这些“旧”分支的更改不仅是小错误修正,还可能是第3版客户要求的更大功能,并且是在第3版中开发的,客户将收到新版本的第3版。最终,功能将被合并到主线,并从那里到所有未来的版本。

一直以来合并来自主线的每一个新的分支每一个分支发生,这实际上意味着主线主要是与最新发布分支相同。

这是第一个令人头痛的问题:从旧版本3在主线这是非常新的,然后从主线到旧版本5的合并有一些不自然的现象(事实上它会导致问题)。例如,比较版本3和版本6可能会很大并且发生变化。直接从版本3合并到版本5会更自然,但TFVC不支持这一点。您只能合并到您的直接父母(或子女)。 git是否有相同的限制?

的另一个问题是,它是不可能在TFVC樱桃挑合并整个功能,如果它的变更不是一个连续的,在历史上不间断的块。如果某些其他功能的变更集是交错的,则必须合并每个连续的子功能块变更集,或者必须合并源分支到目标分支的所有内容。而做多个樱桃挑选合并并不总是可能的,因为所有的变更集可能需要建设或单元测试,甚至是可能的。我可以看到为什么TFVC具有此限制,因为该功能的更新更改集可能基于来自另一个功能的较旧的交错更改集。因此,合并最初来自此功能的变更集可能没有意义。在实践中,我们倾向于合并准备合并的所有内容,无论如何都需要合并。 git在这方面如何比较?

什么是对我们的情况下,明智的分支策略/模型,将在迁移与git帮助我们吗?

+0

你检查混帐流? http://nvie.com/posts/a-successful-git-branching-model/ –

+0

是的,我已阅读,但我发现的一切似乎集中在只有一个主要释放。有人提到支持分支可能是我们需要的东西,但它看起来像一个深奥的功能,你不应该将你的修复合并回主,我不明白。人们通常如何维护多个发布分支? – pinkfloydhomer

+0

master只是默认的分支,但它只是一个分支,它取决于你使用它。对于某些项目,我根本没有掌握,我直接按产品名称创建分支。你可以有多个发布分支。有没有[支持分支机构]的概念(https://gitversion.readthedocs.io/en/latest/git-branching-strategies/gitflow-examples/#support-branches)其高达你的流量来定义分支你的方式想。此外,当您松开,没有什么,告诉你必须从主版本中,您可以从任何一间分行发行,你可以标记针对这一分支 –

回答

0

有TFVC(CVCS)和git(DVCS)之间的巨大差异。 而对于下面的git usuallyas简单的工作流程:

  • feature分支机构通常是由develop分公司创造了开发新功能或修复错误。他们通常会缩短生活分支。一个功能或bug完成后,它应该合并到develop分支。

  • develop分支用于所有的开发者在其合并他们的作品(功能和错误)。

  • master作为管理稳定的代码为您的项目的主要分支。 QA团队可以测试合并develop分支到master分支。

因此分支结构的样子:

...----------------- master 
     / .../
...---------------- develop 
    \/ \ /
     --  --- 
    feature1 featuren 
+0

我明白这一点。但在我们的案例中,我们有多个主分支可以这么说。我们还将开发与功能分支等隔离开来。但是在你的图中,你只有一个可以从中释放的分支,那就是主分支。在我们的情况下,我们必须能够从几个“主”分支中释放,每个分发一个分支。另一方面,这些多个主分支不是独立的,在早期版本中进行的更改应该合并到新版本以避免回归。我们不能成为世界上唯一维护多个版本的团队吗? – pinkfloydhomer

+0

我想这就像微软必须保持两个Word 2010中,字2013和Word 2016年如果一个bug修复的Word 2010中,您必须将其合并到Word 2013和Word 2016,如果修复是相关的,也有。 – pinkfloydhomer

+0

这就是TFVC和git的区别。正如你在图中显示的那样,对于TFVC,你需要有许多发布分支(1〜7),但对于git,你只需要一个发布分支。更详细的介绍,你可以参考git book:分支和合并https:// git-scm。COM /电子书/ EN/V2/Git的分支 - 基本分支,和合并。而对于git,通常主分支称为主分支,它是一个默认分支,根据您的描述,主人似乎是功能分支。但这并不重要,因为它只是由我们所称的不同分支名称引起的。 –