为简单的白标签解决方案努力寻找理想的 Git 分支策略
Struggling with an ideal Git branching strategy for a simple whitelabel solution
我正在将我的源代码从 TFVC 领域转移到 Git,我认为是时候清理并正确地进行了 - 目前有很多 copy/pasting 正在进行。
我的项目有一个 'main' 解决方案 - 如果您愿意,可以将其视为黄金标准。但是我的项目适配不同的业务,两者的内容有差异,有的包含深奥的业务逻辑也各不相同(我认为是一种比较松耦合的方式)。
我不知道维护 'master' 构建和不同版本的最佳策略。
我是为每个版本创建一个包含多个分支的存储库,还是将它们分成不同的存储库(但显然我将无法合并新代码,所以这并不理想)。
我过去遵循 'Release Isolation' 策略:
F1 ------
|--MASTER----------------
F2 ------ |---v1.4 |---v2.0
| |
|--HF1 |--E1
抱歉画面太糟糕了,但 Master 是我的部署来源,F1/2 是功能,v1.4/v2.0 是我们需要支持的版本,HF1 是修补程序来自支持该版本,E1 是添加到该版本的增强功能。
任何修补程序都将合并回 Master,当 Master 充满了足够的新功能和经过测试的功能可以上线时,我们将创建一个新版本 (v3.0)。
问题是,我不知道这个模型如何适应我的 WhiteLabel
F1 ------
|--MASTER(main client)----------------
F2 ------ |---client2 |---client3
| |
|----v1.0 |
| |--E1 |--v1.1
|----v2.0 |----HF1
不知道这样够不够稳定
如果我有一个跨所有构建的功能,我可以从 Master 的左侧开始,然后推送到每个版本的新版本,然后协调所有合并问题。
如果我有一个错误(即 HF1),那么我将不得不在很多分支中合并它(好吧,至少是支持的版本和 dev/master 个分支)
这是理想还是我走错了路?
我称之为 - 分叉大师策略。
(The Times)
----MASTER---
WSJ-MASTER---| | | |---FT-MASTER
| | | | | |
| | | | | |
| WSJ-RELEASE | | | FT-RELEASE
|--- | | | | |
| WSJ-HF1 | | FT-FR1 |---FT-HF1
WSJ-FR1--| | | |
| TIMES-BF1--| |--TIMES-RELEASE |---FT-HF2
WSJ-BF1--| | |
TIMES-FR1--| |--TIMES-HF1
在这个拥有软件产品并出售给不同报纸的假设示例中,《时代》被认为是我们的核心平台,我们产生了细微的变化(因此分叉了 master)。
我们不需要 'release isolation' 因为我们只支持一个版本的网站。在 'masters' 的左侧,我们有所有新的开发(即 enhancements/bug-fixes/forks 用于对代码库进行大量更改)。
在右侧,我们有一个 'release' 分支,它始终与生产中的内容保持一致,因此我们可以轻松地将其分支出来进行热修复。
过去几天使用它(我很感激那是一段可怜的时间),到目前为止一切顺利!
我正在将我的源代码从 TFVC 领域转移到 Git,我认为是时候清理并正确地进行了 - 目前有很多 copy/pasting 正在进行。
我的项目有一个 'main' 解决方案 - 如果您愿意,可以将其视为黄金标准。但是我的项目适配不同的业务,两者的内容有差异,有的包含深奥的业务逻辑也各不相同(我认为是一种比较松耦合的方式)。
我不知道维护 'master' 构建和不同版本的最佳策略。
我是为每个版本创建一个包含多个分支的存储库,还是将它们分成不同的存储库(但显然我将无法合并新代码,所以这并不理想)。
我过去遵循 'Release Isolation' 策略:
F1 ------
|--MASTER----------------
F2 ------ |---v1.4 |---v2.0
| |
|--HF1 |--E1
抱歉画面太糟糕了,但 Master 是我的部署来源,F1/2 是功能,v1.4/v2.0 是我们需要支持的版本,HF1 是修补程序来自支持该版本,E1 是添加到该版本的增强功能。
任何修补程序都将合并回 Master,当 Master 充满了足够的新功能和经过测试的功能可以上线时,我们将创建一个新版本 (v3.0)。
问题是,我不知道这个模型如何适应我的 WhiteLabel
F1 ------
|--MASTER(main client)----------------
F2 ------ |---client2 |---client3
| |
|----v1.0 |
| |--E1 |--v1.1
|----v2.0 |----HF1
不知道这样够不够稳定
如果我有一个跨所有构建的功能,我可以从 Master 的左侧开始,然后推送到每个版本的新版本,然后协调所有合并问题。
如果我有一个错误(即 HF1),那么我将不得不在很多分支中合并它(好吧,至少是支持的版本和 dev/master 个分支)
这是理想还是我走错了路?
我称之为 - 分叉大师策略。
(The Times)
----MASTER---
WSJ-MASTER---| | | |---FT-MASTER
| | | | | |
| | | | | |
| WSJ-RELEASE | | | FT-RELEASE
|--- | | | | |
| WSJ-HF1 | | FT-FR1 |---FT-HF1
WSJ-FR1--| | | |
| TIMES-BF1--| |--TIMES-RELEASE |---FT-HF2
WSJ-BF1--| | |
TIMES-FR1--| |--TIMES-HF1
在这个拥有软件产品并出售给不同报纸的假设示例中,《时代》被认为是我们的核心平台,我们产生了细微的变化(因此分叉了 master)。
我们不需要 'release isolation' 因为我们只支持一个版本的网站。在 'masters' 的左侧,我们有所有新的开发(即 enhancements/bug-fixes/forks 用于对代码库进行大量更改)。
在右侧,我们有一个 'release' 分支,它始终与生产中的内容保持一致,因此我们可以轻松地将其分支出来进行热修复。
过去几天使用它(我很感激那是一段可怜的时间),到目前为止一切顺利!