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/
希望这可以帮助.