将多个并行功能发布到同一应用程序中的 Git 分支策略

Posted

技术标签:

【中文标题】将多个并行功能发布到同一应用程序中的 Git 分支策略【英文标题】:Git branch strategy with multiple parallel feature release into the same application 【发布时间】:2018-02-14 10:17:55 【问题描述】:

我们正在为并行发布的网络应用开发模块。我们正在尝试找出一个好的分支策略来保持对已发布模块的概述。这是我们当前的系统:

Master:包含所有发布的模块/代码(匹配生产) env/test:部署到测试环境的分支 env/acceptance:部署到验收环境的分支 env/production:部署到生产环境的分支

由于模块是并行开发和发布的,因此一个模块可以一个接一个地启动并提前发布。为了完成这项工作,一个新模块从 master 的功能分支开始。此功能分支被压缩并合并到 env/test 中,为新模块创建单个提交。现在困难的部分开始了。为了防止合并到 env/* 分支中,我们添加了一个强制 squash 合并的策略。对于测试,这是正常工作的,因为它是新模块/功能合并到的第一个地方。当我们将合并合并到验收/生产和 master 中时,我们会失去 master 和 env/* 分支之间的引用。我们想维护一个参考,这样我们就可以检查在主节点之前接受了多少(接受阶段未发布的模块)。

我们知道这不是最佳解决方案,但正在努力寻找更好的策略。客户真的希望保持并行开发,因为有些模块在验收阶段可能需要几个月的时间(许多利益相关者等),有些可以在一周内发布。使用固定编号的发布系统会延迟一些模块,并且当模块在接受期间被取消时会引入其他问题。

【问题讨论】:

【参考方案1】:

将存储库拆分为每个模块的存储库(这种方法用于微服务,通常在 GitHub 上用于开源模块)。然后每个存储库可以有单独的分支、单独的版本控制方案等。

【讨论】:

但是您如何处理模块交互?然后,您在自己的存储库之外有一个依赖项。 这就是单独版本控制的用武之地。您应该为每个模块使用语义版本控制 (semver.org),然后在需要对一个模块进行更改以依赖它时根据需要调整版本在另一个模块中。

以上是关于将多个并行功能发布到同一应用程序中的 Git 分支策略的主要内容,如果未能解决你的问题,请参考以下文章

git如何解决冲突?

Git的branch操作详解

activiti-并行网关

git 在多个修补程序和功能提交后同步分支

git rebase合并同一个分支的多个提交

git 合并两个分支的某个文件