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

时间:2019-04-07 23:54:30

标签: git merge version-control branch trunk

摘自文章 Source Control Done Right

  

点击“创建分支”按钮,即可看到一个   多种错误地分支代码库的方法。但是这里有   只有两个正确的策略-按规则分支和按分支分支   例外–两者都与隔离发行版更改有关。   因此,应该始终通过其分支来标识分支   相应的发行号。

     

原因很简单:只有一个主干(主干,根,   父级,或任何您想调用的名称),以及该代码下的代码   主干是现在正在生产的产品(最新部署的版本),   或以后将要生产的内容(下一个计划的版本)。和   这意味着您要么总是分支,要么有时只是分支。

  • 按例外分支策略:

Branching by exception strategy

  • 按规则分支策略:

Branching by rule

当您必须并行维护软件产品的多个发行版本时(除非您具有软件即服务的交付模型,否则这是常见的),按规则分支策略似乎是最合适的*。但是在这种情况下,如果在专用环境中使用每个发行分支的所有标签的连续部署(例如,在2.2环境中自动部署所有2.2.x标签,在2.3环境中自动部署所有2.3.x标签) ,每个发布分支的所有标签也将自动合并到master分支中,因为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分支的目的是什么?在我看来,master分支仅对具有单个发行版本的软件产品有意义。一次,甚至更多,这就是使用异常分支策略的时候。


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

2 个答案:

答案 0 :(得分:2)

  

使用master分支的目的是什么?

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

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

答案 1 :(得分:1)

这个问题没有一个普遍的真实答案,因为它是基于一个主观的文章,该文章大约在十年前建议仅使用两种分支策略。请注意,那个时候SVN仍然是国王,并且在那里创建分支机构非常昂贵-因此,没有多少人只是因为他们想要这样做而考虑使用很多分支机构(但是有些人这样做了)。

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

无论如何,^^^只是为了解释,所引用的文章不是法律,而是作者的愿景。该文章可能是错误的或不完整的(嗯,它不完整,因为它不包括一年前建议的git flow)。如果您在那里看到问题-可能确实是问题,而不是您缺乏理解。

回答问题:

  

使用按规则分支策略时,使用master分支的目的是什么?在我看来,master分支仅对具有单个发行版的软件产品有意义。

是的,积极地使用master分支对于具有单个发行版本的产品最有意义。实际上,“软件即服务”(例如“网站”)是最好的模型。如果在您的产品模型中可能同时在不同版本的软件上有不同的客户,则该分支策略需要改进。在这种情况下,您将需要提出一个更复杂的方案。

但是,即使使用并行版本,模型master仍然是必需的。它是您开发的所有功能的稳定分支。它的用法很少,但很重要-当产品经理决定开始开发一套新功能时,它是新版本的起点。这也是您的策略应要求将发布的分支定期合并回master的原因-大概是在每次发布之后。与图片相反,合并到master不会终止这些分支的生命。相反,这将是使master保持最新状态并继续作为进一步开发迭代的适当来源的改进同步。