我对TFS和源代码控制都很陌生。我无法理解分支的优势。因为我可以通过创建2个文件夹main和开发来做同样的事情,当我完成开发时。我可以使用任何diff工具和主分支合并代码。
那么分支是什么意思?我知道必须有一个巨大的优势,但我无法理解。
答案 0 :(得分:33)
(更新:TFS现在支持git进行版本控制,因此此答案的其余部分不再适用)
我会google branch-per-feature。
分支的主要优点是您可以处理某项功能,而不会被其他人的工作打断。准备就绪后,您可以合并并查看是否有许多功能可以很好地协同工作。这通常是在开发功能时完成的,但是一旦功能完成,就可以完成小功能。
优势在于您可以清楚地了解实施某些操作所做的工作。没有分支,你会有很多提交与其他功能混合在一起。提交。如果QA没有通过某个功能,那么您只需要使用其他功能的提交将您的工作组合在一起。另一种方法是尝试修复您的功能,以便QA通过。这可能在星期五下午不可行。
功能切换是省略工作的另一种方法,但这会增加代码的复杂性,切换本身也可能存在错误。这是非常厌倦的事情,看看这是如何成为一个可接受的"变通。
分支还用于跟踪多个版本的发行版的更改。多个客户使用的产品可能处于一组客户使用1.0产品而其他客户已使用2.0的情况。如果同时支持两者,则应通过指定给它们的分支跟踪每个更改。以前的观点仍然适用于这些分支机构的开发。
话虽如此,由于多种原因,TFS在每个功能分支上并不理想。最大的是它不支持3路合并 - 它只有所谓的无基础合并。跟踪历史记录的方式,TFS无法显示功能分支与您尝试将其合并到的位置之间的共同祖先。这使您可以解决许多冲突。一般来说,很多使用TFS的人因为这个原因而避免分支。
三向合并很棒,因为它们会告诉你共同的祖先是什么,你的变化是什么以及另一个分支的变化是什么。这将使您能够就如何解决冲突做出非常有根据的决定。
如果你必须使用TFS,我建议使用git-tfs来利用3向合并和许多其他功能。其中一些包括:rerere,rebasing,disconnected model,local history,bisect等等。
Rebase非常有用,因为它允许您将功能更改为基于另一个起点,省略提交,压缩提交,拆分提交等。一旦准备好,您可以将它们合并到集成或发布分支中,具体取决于在您决定的工作流程上。
Mercurial也可能更容易使用,但从长远来看不会那么强大。
如果您有机会,我强烈建议远离TFS进行源代码管理,因为与现代DVCS相比存在很多限制。
如果您想有效地管理分支/合并,请遵循以下一套很好的指导原则:
http://dymitruk.com/blog/2012/02/05/branch-per-feature/
希望这有帮助。
答案 1 :(得分:4)
有很多信息可供阅读,但如果有帮助的话,TFS分支指南就在这里 - http://tfsbranchingguideiii.codeplex.com/