摘自文章 Source Control Done Right :
点击“创建分支”按钮,即可看到一个 多种错误地分支代码库的方法。但是这里有 只有两个正确的策略-按规则分支和按分支分支 例外–两者都与隔离发行版更改有关。 因此,应该始终通过其分支来标识分支 相应的发行号。
原因很简单:只有一个主干(主干,根, 父级,或任何您想调用的名称),以及该代码下的代码 主干是现在正在生产的产品(最新部署的版本), 或以后将要生产的内容(下一个计划的版本)。和 这意味着您要么总是分支,要么有时只是分支。
当您必须并行维护软件产品的多个发行版本时(除非您具有软件即服务的交付模型,否则这是常见的),按规则分支策略似乎是最合适的*。但是在这种情况下,如果在专用环境中使用每个发行分支的所有标签的连续部署(例如,在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是使用按规则分支策略的示例。
答案 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
保持最新状态并继续作为进一步开发迭代的适当来源的改进同步。