Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tfs 按功能划分的分支-优势/劣势?_Tfs_Branch_Branching And Merging - Fatal编程技术网

Tfs 按功能划分的分支-优势/劣势?

Tfs 按功能划分的分支-优势/劣势?,tfs,branch,branching-and-merging,Tfs,Branch,Branching And Merging,我目前在一个项目中工作,分支和合并从一开始就没有很好地工作。为了改变这一点,我们一直在讨论各种不同的方法。我假设每个人都有自己的哲学,关于如何做这类事情,所以它似乎也在这里 我们一直在讨论的一件事是按特性进行分支。我们碰巧对这种方法的好坏有着非常不同的看法 你以前有这样做的经验吗?效果好吗?你有问题吗?什么样的问题 我知道这个问题不会有一个正确的答案,但我发现听到世界各地其他开发者的意见非常有趣,stackowerflow似乎是一个很好的地方 特性分支的替代方法是特性切换(即代码中的一个开关,可

我目前在一个项目中工作,分支和合并从一开始就没有很好地工作。为了改变这一点,我们一直在讨论各种不同的方法。我假设每个人都有自己的哲学,关于如何做这类事情,所以它似乎也在这里

我们一直在讨论的一件事是按特性进行分支。我们碰巧对这种方法的好坏有着非常不同的看法

你以前有这样做的经验吗?效果好吗?你有问题吗?什么样的问题


我知道这个问题不会有一个正确的答案,但我发现听到世界各地其他开发者的意见非常有趣,stackowerflow似乎是一个很好的地方

特性分支的替代方法是特性切换(即代码中的一个开关,可以使特性可用或不可用)。在这方面,它们可能非常有用。它们可以允许开发和部署新功能,但只有在切换……切换良好(这甚至是一个词)时才可用。我想这有点像谷歌实验室的想法

这里需要注意的一点是,如果在开发过程中没有仔细考虑和测试这些切换,它们本身也可能导致戏剧性的结果。实际上,您正在增加您需要执行的测试量,以查看在启用和禁用功能时的行为。如果您正在开发多个功能,那么您需要了解它们如何与启用/禁用状态的各种组合交互

话虽如此,如果做得好,它们也会带来巨大的好处。您可以向某些用户(超级用户或该功能的拥护者等)发布某项功能,而不会影响所有人。如果它被认为是导致问题的原因,则可以通过更改某些配置元素存在的DB记录来关闭它

一旦一个给定的特性被认为已经通过了测试,建议删除该切换,使其成为整个应用程序的一部分

话虽如此,我并不认为特性分支是不好的,但它确实依赖于每个人理解源代码管理和合并的概念,并确保分支不会与主分支太不一致,从而导致大规模OMG类型的合并


我最近参加了一个由Thoughtworks主办的会议,Martin Fowler在会上讨论了这个话题。会谈的重点是持续交付,以及这如何有助于克服缓慢和高风险的部署。有关更多信息,请参阅或仅搜索持续交付。

我们按功能使用分支,它对我们非常有效。最大的优点是,功能团队知道,在新功能集成(在我们的例子中是集成到Main中)之前,他们正在进行的工作不会影响其他功能团队

当我们完成一个新功能(分支已合并到Main)时,我们将分支移动到分支历史文件夹中。这使得开发人员需要查看的分支(文件夹)的数量保持在最少


在我们的情况下,没有人在主要部门工作。所有开发都在功能分支中完成。初始开发(在首次发布到生产之前)在开发分支中完成。在第一次真正投入生产后,所有的开发都在一个新的功能分支中完成。

如果您有一个中小型团队,那么当您不真正需要完全分支隔离时,请避免额外的分支。。。特别是如果开发团队的文化反对正确地进行分支和合并。也许作为交换,需要维护更少的分支,请确保允许进行合并的所有开发人员都严格遵循合并实践。搁置集(在TFS中)和短期特征分支是将合并开销和相关风险降至最低的好技术

细节 以下是我发现的一种模式,可以平衡生产率和版本控制安全性(对于由约25名开发人员和约3名测试人员组成的团队):

  • 在同一分支中工作:在松散耦合或不相关代码上工作的开发人员可以相对安全地直接在同一个开发(或“集成”)分支中工作。错误修复和非破坏性更改非常适合这里(降低了影响其他开发人员的重大倒退的风险)。持续集成构建和封闭构建是两种最佳实践,可以降低许多开发人员在同一分支中工作的风险。 切换注意:功能切换可用于进一步避免分支的需要,但请确保测试/维护切换行为的开销不会比使用分支风险更大

  • 搁置集:使用版本控制系统的功能保存特定于开发人员的原型分支中挂起的更改。在TFS(Team Foundation Server)中签入的开发人员可以使用搁置集而不是个人分支(或许多微特征/任务分支),如果它们是唯一一个需要在集成到/DEV分支中签入之前开发和测试该特征的人。我相信其他版本控制系统也有类似的结构 反模式:本地工作区自动为每个开发人员提供临时隔离。。。但是开发人员需要经常/每天在源代码管理中的某个地方签入他们的更改,以防止丢失天+本地工作的风险。)

  • 短期分支:当您确实需要一个分支来进行隔离(例如多个开发人员需要处理的中断功能)时,创建短期功能分支是一种很好的方法。我建议使用一种分支命名约定,使分支使用随着时间的推移保持良好的定义和唯一性

  • 上述工作流程的主要优点是,它将合并税(整合正向/反向(向下/向上合并)所花费的时间)降至最低,而不是开发直接提高客户满意度的功能

    示例场景:新的“酷”功能将打破existin