多分支模型

Multi-branching model

目前我有一个关于我应该使用的分支模型的任务。 现在我有 master 分支,我不时地分支发布分支以发布有关新功能的分支。这就是我的分支模型现在的样子。

master
|
|---- release 1.0 branch
|   |
|   |
|   |
|   |----- *(1) needed branch
|   |    |
|   |    |
|   |    |
|   |    |
|----    |
|---------
|
|---- release 1.1
|   |
|   |----- needed branch
|   |    |
|   |    |
|   |

*(1) - Each time release branch is closed for features I make new feature branch and then merge this("needed branch") just before next release.

阅读本文可能会提出一些问题。

我会在出现问题时对其进行编辑,以便我可以在 post

中给出答案
  1. 如果您需要更多功能,为什么要关闭发布分支? - 问题是我需要在开发 "over".
  2. 之后随时拥有稳定的分支(发布)

我想完成什么?

这个分支模型的问题是我可能有很多功能,每个功能都针对不同的客户,而且许多客户不想再等 1 或 2 周,直到下一次部署。我正在考虑为每个客户创建分支并在那里推送功能,每当客户想要获得给定的功能时,我都可以从那里部署而不影响其他客户。因为现在这是不可能的。但这确实是一种糟糕的方法,因为随着客户的增长,分支机构也会增长。

我想要更优雅的方法。我知道评论中会有很多问题,所以请问他们,看看我是否可以回答他们并提出解决方案或至少一个想法。

听起来你的问题不是Git:你的问题是人。既然这些人付钱给你,大概,这似乎是一个正确的问题!

我会做的是:

|
* tag:r1
|\______________________
|   \             \     \
|    * feature1   WIP2  WIP3
| __/              |
|/                 |
* tag:r2           * feature2
| ________________/
|/
* tag:r3
|
master

换句话说,我会完成 master 的所有发布,以及功能分支上的所有工作。当一个功能完成、测试、 客户需要它时,只有那时我才会合并到 master、重新测试并发布另一个版本。这样master永远不会处于开发状态;它总是 "just released",或 "just about to release"(或空闲)。

如果 WIP3 ("Work in progress 3") 需要很长时间来开发,图表将像这样演变:

|
* tag:r1
|\__________
|           \
|           WIP3
* tag:r2     |
|\__________ |
|           \|
|            * merge
* tag:r3     |
|\__________ |
|           \|
|            * merge
|            |
|            * feature3
| __________/
|/
* tag:r4
|
master

(我删除了 feature1feature2 分支,现在它们合并了,但您仍然会在历史记录中看到多个路径。)

如果您发现客户想要某个旧版本的错误修复版本(也许他们为支持付费,但没有为新功能付费?),那么您始终可以从标签创建一个发布分支:

|
* tag:r1
|
* tag:r2
|\_________
* tag:r3   \
|          * bugfix
* tag:r4   |
|          * tag:r2.1
master     |
           release2.x_branch