【发布时间】:2021-01-18 15:59:09
【问题描述】:
- 我们在 Github 上有一个单一存储库,多个团队通过基于 master 创建新分支并创建有关功能/错误修复等的拉取请求来脱离 master。
- 但是,对于我的团队来说,大多数时候(尽管并非总是如此),我们所做的事情并不能直接合并到 master 上,因为它需要经过产品经理的批准和客户的批准,这可能需要一段时间才能实施,而我们工作的 Epics 需要很长时间才能交付(通常需要 4 周的开发和 1 周的审核/调整),因此需要多个团队成员来处理不同的部分。
- 为了能够采用这样的分支策略,我们目前的工作如下:
- 我们创建一个名为 “releases/*” 的新分支,它成为我们要合并到 master 的分支(意味着上线到生产)
- 我们基于 releases/* 分支创建子分支,这些分支通过拉取请求合并到“releases/* 分支”。这样,多人可以同时处理史诗任务,这意味着 releases/* 分支将有多个子分支。
- 这使我们能够以这种方式在更小的阶段审查史诗的各个方面,而不是一次审查巨大的拉取请求。
- 一旦一切顺利并合并到releases/*分支,我们将releases/*分支合并到master,这意味着Epic完成了,变化是直播。
请看下图直观了解
我们在使用这种方法时遇到的问题:
-
在基于 releases/* 分支的子分支中工作时,有时我们需要从同一级别的另一个子分支进行更改,并且我们会不断挑选我们可能需要的更改能够完成我们自己的任务。这是唯一的方法,还是有更好的方法?
-
对于 CI 测试,我们在 releases/* 分支上没有分支保护。
- 当测试失败时,我们可能会意外地将拉取请求合并到子分支的 releases/* 分支。我们尝试将分支保护添加到 releases/* 分支,以便保护它们以防止通过 CI 测试,但是,一旦我们在 Github 中启用此设置,我们就无法执行任何“推送”所需的操作到 releases/* 分支,(与 master 重新绑定以提取我们需要其他团队实施的更改或进行合并提交然后推送等)
- 来自 Github 的用于启用状态检查的分支保护设置:“启用后,必须先将提交推送到另一个分支,然后在状态检查通过后合并或直接推送到与此规则匹配的分支。”
- 这个 ^^ 意味着我们只能创建一个拉取请求来检索从主分支到 releases/* 分支的任何更改,并相应地重新设置子分支。
- 当测试失败时,我们可能会意外地将拉取请求合并到子分支的 releases/* 分支。我们尝试将分支保护添加到 releases/* 分支,以便保护它们以防止通过 CI 测试,但是,一旦我们在 Github 中启用此设置,我们就无法执行任何“推送”所需的操作到 releases/* 分支,(与 master 重新绑定以提取我们需要其他团队实施的更改或进行合并提交然后推送等)
有什么建议吗?
【问题讨论】:
标签: git github version-control git-branch branching-strategy