【问题标题】:TFS branching, what are the advantagesTFS分支,有什么优势
【发布时间】:2011-06-01 23:35:58
【问题描述】:

我对 TFS 和源代码控制非常陌生。我无法理解分支的优势。因为我可以通过创建 2 个文件夹 main 和 development 来做同样的事情,所以当我完成开发时。我可以使用任何 diff 工具将代码与主分支合并。

那么有分支有什么意义呢?我知道肯定有很大的优势,但我无法理解。

【问题讨论】:

标签: tfs version-control branching-and-merging


【解决方案1】:

(更新:TFS 现在支持 git 进行版本控制,因此此答案的其余部分不再适用)

我会谷歌每个功能的分支。

分支的主要优点是您可以处理一项功能,而不会被其他人的工作打断。准备好后,您可以合并并查看许多功能是否可以很好地协同工作。这通常在功能开发时完成,但对于小功能可以在功能完成后完成。

优点是您可以清楚地了解自己为实现某项所做的工作。如果没有分支,您将有大量的提交与其他功能的提交混合在一起。如果 QA 没有通过某个功能,您需要完成工作,以便仅使用其他功能的提交来组合另一个构建。另一种选择是尝试修复您的功能,以便质量检查通过。这在周五下午可能不可行。

功能切换是另一种省略工作的方式,但这会增加代码的复杂性,并且切换本身可能存在错误。这是非常令人厌倦的事情,看看这如何成为“可接受的”解决方法。

分支也用于跟踪多个版本的更改。被多个客户消费的产品可能处于这样一种情况:一组客户正在使用产品的 1.0,而其他客户已经在使用 2.0。如果您同时支持两者,则应通过指定给它们的分支跟踪对它们的更改。前面的几点仍然适用于为这些分支进行开发。

话虽如此,由于多种原因,TFS 在每个功能分支方面并不理想。最大的是它不支持 3 路合并——它只有所谓的无基础合并。跟踪历史的方式,TFS 无法向您显示功能分支和您尝试将其合并到的位置之间的共同祖先。这使您有可能解决很多冲突。一般来说,很多使用 TFS 的人会因为这个原因回避分支。

三向合并非常棒,因为它们会向您展示共同祖先是什么、您的更改是什么以及另一个分支中的更改是什么。这将使您能够就如何解决冲突做出非常明智的决定。

如果您必须使用 TFS,我建议您使用 git-tfs 以便能够利用 3 路合并和许多其他功能。其中一些包括:rerere、rebase、断开连接的模型、本地历史、二等分等等。

Rebase 非常有用,因为它允许您将功能更改为基于另一个起点、省略提交、将提交压缩在一起、拆分提交等。一旦准备好,您可以将它们合并到集成或发布分支中,具体取决于根据您决定的工作流程。

Mercurial 也是另一种可能更易于使用,但从长远来看不会那么强大的工具。

如果您有机会,我强烈建议您从 TFS 转移到源代码控制,因为与现代 DVCS 相比存在很多限制。

如果您想有效地管理分支/合并,请遵循一组很好的指南:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

希望这会有所帮助。

【讨论】:

  • -1:他询问了 TFS。他没有要求对 TFS 进行咆哮。这也不是“分支的主要优势”。小型开发人员可能会出现这种情况,但在商业或企业项目中则不然。
  • FWIW 我认为信息是公平的,如果没有提示的话。很多时候,未经提示的信息仍然非常感谢。
  • 这是关于分支的。他碰巧在使用 tfs。真相有时令人不快。
  • 站在 adymitruk 这边。这很好,它深入到分支,但也提供了关于 TFS 问题的合理建议。没有 VCS 是没有问题的(甚至是 DVCS)。如果你不知道你正在使用的东西的弱点,而只知道它的优点,你就会让自己心痛。
  • 错了! TfS 保存了共同祖先 - 只需按日期获取版本!如果不记得日期,您可以标记它们。您也可以使用分支自己创建共同祖先。是的,这些有点小技巧,但是来吧,它们比切换源代码控制系统要容易 1000 倍(除非您的项目或开发人员数量非常少)。好悲伤!
【解决方案2】:

有很多信息需要通读,但如果有帮助的话,这里有 TFS 分支指南 - http://tfsbranchingguideiii.codeplex.com/

【讨论】:

猜你喜欢
  • 2010-09-19
  • 2012-12-19
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2013-04-08
  • 2014-10-04
  • 2017-03-25
相关资源
最近更新 更多