按规则分支时主分支的用途

Purpose of the master branch when branching by rule

来自文章Source Control Done Right:

With the “create branch” button just a click away, there are a plethora of ways to incorrectly branch your codebase. But there are only two correct strategies – branching by rule and branching by exception – and both are related to isolating changes in releases. Because of this, a branch should always be identified by its corresponding release number.

The reason for this is simple: there’s only one trunk (mainline, root, parent, or whatever you want to call it), and the code under that trunk is either what’s in production now (the last deployed release), or what will be in production later (the next planned release). And that means you’re either always branching or only branching sometimes.

当您必须并行维护软件产品的 多个 发布版本时(这很常见,除非您有软件即服务交付模型),分支按规则策略似乎是最合适的*。但是在这种情况下,如果您在专用环境中使用每个发布分支的所有标签的持续部署(例如,您在 2.2 环境中自动部署所有 2.2.x 标签和所有 2.3.x tags in a 2.3 environment),每个发布分支的所有标签也将自动合并到 master 分支中,因为 master 分支应该反映生产中的内容。如果不同发布分支的标签在时间上交错会导致合并冲突(比如上面的branching by rule diagram,如果使用持续部署,这个标签序列会被合并到master分支:2.2.1, 2.2.2 , 2.2.3, 2.3.1, 2.3.2, 2.2.4, 2.3.3, 2.2.5等;但是由于没有使用持续部署,所以只部署了每个发布分支的最后一个标签,因此自动合并进入主分支,所以没有这个问题。

那么在使用按规则分支策略时,使用 master 分支的目的是什么? 在我看来,master 分支只对具有以下功能的软件产品有意义一次发布一个版本,而且特别多,也就是说在使用异常分支策略时。


* Github repository of the CPython interpreter 是使用按规则分支策略的示例。

What is the purpose of using the master branch?

在 Git 中,master 按照惯例是在克隆后签出的默认分支(您可以更改它,但在这里,我们假设远程仓库有 'master'作为其默认分支)

所以使用 master 的目的是:您希望您的贡献者(世界上任何对您的存储库具有读取权限的人)在克隆您的时 see回购。
它可以是最新的主要发布版本,也可以是最新的开发状态:这取决于您在 README 或“guidelines for repository contributors”.

中描述的内容

这个问题没有普遍正确的答案,因为它基于大约十年前建议仅使用两种分支策略的主观文章。请注意,那时候 SVN 仍然是王者,在那里创建分支是昂贵的——所以没有多少人只是因为他们想要而考虑使用大量分支(但有些人确实这样做了)。

从那时起,许多事情发生了变化,许多团队采用了其他策略 - 例如,git flow 分支模型,它实际上成为了行业标准之一。在该策略中,所有分支都发生在 development 分支之外,而 master 仅用作稳定备份。

反正那个^^^只是说明一下,引用的文章不是法律,而是作者的眼光。这篇文章可能是错误的或不完整的(好吧,它是不完整的,因为它不包括一年前建议的 git flow)。如果您在那里看到问题 - 它可能确实是一个问题,而不是您缺乏理解。

回答问题:

When using the branching by rule strategy, what is the purpose of using the master branch? It looks to me that the master branch only makes sense for software products which have a single release version...

是的,使用 master 分支 active 对具有单一发布版本的产品最有意义。事实上 "software-as-a-service"(比如说 "website")是最好的模型。如果在您的产品模型中可能有不同的客户同时使用不同版本的软件,则该分支策略需要改进。在这种情况下,您将需要想出一个更复杂的方案。

然而,即使使用并行版本模型 master 仍然是必需的。它是一个稳定的分支,具有您开发过的所有功能。它的用法 不常见 但很重要 - 当产品经理决定开始开发一组新功能时,它可以作为新版本的起点。这也是为什么您的策略应该要求定期将已发布的分支合并回 master 的原因 - 大概是在每次发布之后。与图片相反,合并到 master 不会结束这些分支的生命。相反,让 master 保持最新并继续成为进一步开发迭代的正确来源将是同步的改进。