(更新: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/
希望这会有所帮助。