为 Team Foundation Server 2012 中的补丁分支
Branching for a Patch in Team Foundation Server 2012
我会在这个问题的开头声明我们很可能错误地使用了 TFS,这是基于一些早期对 TFS 工作原理和 GIT 工作原理的误解。
背景:
- 我们有一个主分支,这是我们进行所有开发的地方。
- 当我们准备好发布时,我们会从主分支创建一个分支并按版本命名(例如,“v8.10.0”)。
- 我们从这个新分支编译和发布。
- 然后我们在主分支上继续开发。
- 如果在之前的版本中发现了严重问题,并且我们正处于开发分支冲刺的中游,那么我们需要为之前的版本创建一个补丁。在这种情况下,我们从发布分支创建一个新分支并开始修复该新分支上的问题(例如“v8.10.1”)。
- 然后我们想要将我们在 8.10.1 分支上应用的修复程序获取到主分支中,因此我们执行从 8.10.1 到 dev 的合并,这就是问题开始发生的地方.此合并是一个无基础的合并,并且合并需要数小时才能完成,并且涉及大量手动合并,并且在该过程结束时通常会有一些文件在合并过程中出现问题。更糟糕的是,TFS 通常决定它可以自动合并一些文件,但它往往会完全错误地执行此操作,我们最终会得到完全损坏的代码。
我们对如何完成这项任务的基本理解似乎存在缺陷,虽然它不经常发生,但它总是咬我们,所以我们错过了什么,正确的做法是什么我在上面概述了?
分支策略有很多种,只有您可以决定哪种最适合您。我从问题中看到的是你有主要的开发分支和发布分支。您没有用于测试的分支。您没有并行开发的分支。您有修补程序的分支。组织分支的一种方法是:
O----------------main dev branch------------------>
| ^
V |
O---------------release branch---------------->
| ^
V |
O--------------hotfix branch------------->
所以你有 1 个分支用于开发中的主要工作。来自 main 的 realese 分支(一个分支不是每个版本)。并为发布的修补程序分支。对于版本控制,您可以在发布分支 (https://msdn.microsoft.com/en-us/library/ms181439.aspx) 上应用标签。现在您可以毫无问题地从 main 合并到 release,从 release 合并到 hotfix,然后从 hotfix 合并到 realese,再从 release 合并到 main。
实际上,测试分支和并行开发分支会使事情变得有点复杂。在我的项目中,我们使用这样的东西:
O--------parallel dev2---------------------------->
^ |
| V
| O---parallel dev1---------------------------->
| ^ |
| | V
O------------------main dev branch---------------->
| ^
V |
O--------------test branch------------------->
| ^
V |
O--------------relese branch------------->
但如果没有这一切,您的设计也应该可行。您遇到问题的主要原因是,当您可以将修补程序分支合并回发布分支以及从发布返回主分支时,您正在进行无基础合并。
我会在这个问题的开头声明我们很可能错误地使用了 TFS,这是基于一些早期对 TFS 工作原理和 GIT 工作原理的误解。
背景:
- 我们有一个主分支,这是我们进行所有开发的地方。
- 当我们准备好发布时,我们会从主分支创建一个分支并按版本命名(例如,“v8.10.0”)。
- 我们从这个新分支编译和发布。
- 然后我们在主分支上继续开发。
- 如果在之前的版本中发现了严重问题,并且我们正处于开发分支冲刺的中游,那么我们需要为之前的版本创建一个补丁。在这种情况下,我们从发布分支创建一个新分支并开始修复该新分支上的问题(例如“v8.10.1”)。
- 然后我们想要将我们在 8.10.1 分支上应用的修复程序获取到主分支中,因此我们执行从 8.10.1 到 dev 的合并,这就是问题开始发生的地方.此合并是一个无基础的合并,并且合并需要数小时才能完成,并且涉及大量手动合并,并且在该过程结束时通常会有一些文件在合并过程中出现问题。更糟糕的是,TFS 通常决定它可以自动合并一些文件,但它往往会完全错误地执行此操作,我们最终会得到完全损坏的代码。
我们对如何完成这项任务的基本理解似乎存在缺陷,虽然它不经常发生,但它总是咬我们,所以我们错过了什么,正确的做法是什么我在上面概述了?
分支策略有很多种,只有您可以决定哪种最适合您。我从问题中看到的是你有主要的开发分支和发布分支。您没有用于测试的分支。您没有并行开发的分支。您有修补程序的分支。组织分支的一种方法是:
O----------------main dev branch------------------>
| ^
V |
O---------------release branch---------------->
| ^
V |
O--------------hotfix branch------------->
所以你有 1 个分支用于开发中的主要工作。来自 main 的 realese 分支(一个分支不是每个版本)。并为发布的修补程序分支。对于版本控制,您可以在发布分支 (https://msdn.microsoft.com/en-us/library/ms181439.aspx) 上应用标签。现在您可以毫无问题地从 main 合并到 release,从 release 合并到 hotfix,然后从 hotfix 合并到 realese,再从 release 合并到 main。
实际上,测试分支和并行开发分支会使事情变得有点复杂。在我的项目中,我们使用这样的东西:
O--------parallel dev2---------------------------->
^ |
| V
| O---parallel dev1---------------------------->
| ^ |
| | V
O------------------main dev branch---------------->
| ^
V |
O--------------test branch------------------->
| ^
V |
O--------------relese branch------------->
但如果没有这一切,您的设计也应该可行。您遇到问题的主要原因是,当您可以将修补程序分支合并回发布分支以及从发布返回主分支时,您正在进行无基础合并。