Version control 当您';你打算将来重写吗? 我的开发团队很快就要分支了——我们已经被SoScCuFe诅咒了,我们要转到Team Foundation Server了,我对一些事情感到好奇。

Version control 当您';你打算将来重写吗? 我的开发团队很快就要分支了——我们已经被SoScCuFe诅咒了,我们要转到Team Foundation Server了,我对一些事情感到好奇。,version-control,tfs,branch,Version Control,Tfs,Branch,传统上,当我们对产品进行重大修订时,甚至文件夹结构或文件名都不保持不变,我们会在源代码管理中创建一个新的根文件夹 比如说 $/V1.0 $/V1.1 $/V1.5 $/V2.0 等等 我对分支是全新的,我读到的一件事是,你可以为你的产品的不同版本使用不同的分支。现在,当您谈论对代码进行热修复或小的更改或修改时——最糟糕的情况是您可能会添加新文件——这是有意义的 但是,当您在产品的“V-Next”版本中计划对产品进行或多或少的完全重写(而是彻底地重写)时,文件夹结构和文件名可能会完全不同,您是否

传统上,当我们对产品进行重大修订时,甚至文件夹结构或文件名都不保持不变,我们会在源代码管理中创建一个新的根文件夹

比如说

$/V1.0
$/V1.1
$/V1.5
$/V2.0
等等

我对分支是全新的,我读到的一件事是,你可以为你的产品的不同版本使用不同的分支。现在,当您谈论对代码进行热修复或小的更改或修改时——最糟糕的情况是您可能会添加新文件——这是有意义的


但是,当您在产品的“V-Next”版本中计划对产品进行或多或少的完全重写(而是彻底地重写)时,文件夹结构和文件名可能会完全不同,您是否仍然希望通过分支来执行此操作?或者您想创建一个新的根目录(上面的$/V2.0)来处理它吗?

我们的开发团队在Subversion中使用了一个非常标准的分支结构。在主存储库中,我们有3个文件夹:

  • 分支机构
  • 标签
  • 树干
在您的示例中,所有的V*文件夹都将放在标记下。所有的主要开发都发生在主干中,当我们需要对另一个项目的主干中的内容进行变更时,我们使用分支


我们还使用分支来存储主干的剧烈变化。如果您需要在重写完成之前修复主干中的错误,这是一个很好的实践。因此,我们会在Branchs下创建一个“V-Next”分支,完成后,我们会将该分支合并回主干。

分支将您的历史记录保存在一起,并允许您查看项目的完整起源。此外,还可能(取决于产品和混乱状态)将已发布版本中的修复程序合并到“下一个”版本中,这可能会或可能不会减少保持同步的工作量。

我不是TFS专家,但我对此有“强烈”的意见

应在任何VCS中保留分支,以隔离与当前开发工作不兼容的开发工作

这意味着,无论您当前工作的环境是什么(分支或无分支),如果您不能在启动您提到的那些剧烈重构的同时继续当前的开发,那么您需要一个分支。
在该分支中,文件的历史记录可以在仍被记录的情况下采用新路径

诀窍是不要解释分支的标记,尤其是当两者都表示为目录时

V2.0
可以解释为:

  • 标记,其中文件的历史记录应该是固定的和不可变的
  • 历史发展到2.0版本的分支
我建议使用一种命名约定来澄清目录背后的意图:

V2.0\u例如,重构将更清晰,并指明一个分支。

根据我的经验,最有效的分支策略是拥有一个“主线”主干,每个主要版本都有分支,然后根据需要每个较小版本都有分支。大多数工作都是在主线上完成的,当我们非常接近发布时,我们会分支并稳定分支

您可以对任意小的变更集/发布进行分支,但最终会产生太多的认知开销,使它们变得有价值。您还可以创建更多的临时分支,以将正在进行的大型工作与主分支隔离,直到更改准备好合并


以所有这些为背景,我认为在发布之初“重新开始”并没有多大价值。即使在发行版结束时,一切都将发生变化,您仍然希望了解事物随时间演变的完整历史。我认为TFS会跟踪移动/重命名/删除等操作。因此,即使您正在进行大量文件级更改,这也是有价值的历史记录。

您可能想看看一些关于最佳实践的文章:

在您的情况下,我不会创建分支来承载您的V-next。只有当您准备通过创建打包分支向客户交付时,才应该创建该分支

我将创建一些短期分支(每个scrum迭代1个分支)来托管您的风险开发,并在每个迭代结束时将它们合并回来。只为有风险的开发创建开发分支,例如您正在谈论的剧烈重构

你的主要分支应该始终保持稳定。准备好交付给客户,或者至少准备好为包装分公司提供服务


我也推荐。

请阅读以下内容:

苹果显然不使用subversion。