TFS分支,有什么优势

Gai*_*ter 7 version-control tfs branching-and-merging

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

那么分支是什么意思?我知道必须有一个巨大的优势,但我无法理解.

Ada*_*ruk 32

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

我会谷歌分支每个功能.

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

优势在于您可以清楚地了解实施某些操作所做的工作.没有分支,你会有很多提交与其他功能的提交混合在一起.如果QA没有通过某个功能,那么您只需要使用其他功能的提交将您的工作组合在一起.另一种方法是尝试修复您的功能,以便QA通过.这可能在星期五下午不可行.

功能切换是省略工作的另一种方法,但这会增加代码的复杂性,切换本身也可能存在错误.这是非常厌倦的事情,看看这是如何成为一个"可接受的"解决方案.

分支还用于跟踪多个版本的发行版的更改.多个客户使用的产品可能处于一组客户使用1.0产品而其他客户已使用2.0的情况.如果同时支持两者,则应通过指定给它们的分支跟踪每个更改.以前的观点仍然适用于这些分支机构的开发.

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

3向合并很棒,因为它们会向您展示共同的祖先是什么,您的更改是什么以及其他分支的变化是什么.这将使您能够就如何解决冲突做出非常有根据的决定.

如果你必须使用TFS,我建议使用git-tfs来利用3向合并和许多其他功能.其中一些包括:rerere,rebasing,disconnect model,local history,bisect等等.

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

Mercurial也是另一个可能更容易使用的,但从长远来看不会那么强大.

如果你有机会,我强烈建议远离TFS进行源代码控制,因为与现代DVCS相比存在很多限制.

如果您想要有效地管理分支/合并,请遵循以下一套很好的指导原则:

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

希望这可以帮助.

  • FWIW我认为信息是公平的,如果是自发的.很多时候,自发信息仍然非常受欢迎. (11认同)
  • 这是关于分支.他碰巧使用tfs.事实有时令人不愉快. (11认同)
  • -1:他询问TFS.他没有要求对TFS进行咆哮.这也不是"分支的主要优势".对于小型开发人员群体而言可能就是这种情况,但在商业或企业项目中则不然. (6认同)
  • 在这个问题上与adymitruk站在一起.这很好,它潜入分支,但也提供有关TFS问题的合理建议.没有VCS没有问题(甚至是DVCS).如果你不知道你正在使用的东西的弱点而只知道它们的优点,你就会为自己的某些心痛做准备. (5认同)
  • 错误!TfS保存了共同的祖先 - 只需按日期获取版本!如果不记得日期,您可以标记它们.您也可以使用分支来自己创建共同的祖先.是的,这些都是一些黑客,但是来吧,它们比切换源控制系统容易1000倍(除非你有很少的项目或开发人员).好悲伤! (2认同)
  • 对不起,不值得,最后你最终得到一个毫无根据的合并,没有本地历史和所有其他问题.完全值得切换.很多人都这样做.在Twitter上搜索#tfs或#git或#mercurial或#svn,看看那里发生了什么. (2认同)