【发布时间】:2021-10-03 04:52:38
【问题描述】:
我的问题是理论/程序问题。我正在尝试找出/构建一个适合我们组织的自定义 Git 工作流(不要与 Git 流混淆)。
我们正在使用 GitLab(但这不是那么重要)并且有以下 3 个长期存在的分支:
-
development(最新稳定代码库) -
staging(自动部署到登台服务器) -
master(自动部署到生产服务器)
development、staging 和 master 分支是受保护的,这意味着开发人员只能合并到它们,但不能推送。此外,在合并期间,为了更清晰的 Git 日志,强制执行 rebase(仅 FF)和 squash-merge。
对于每个功能/错误修复,都会根据development 创建一个新功能分支,并在准备好后合并回各自的分支。
但是问题来了,我们想要很好地控制合并到 3 个长寿分支中的内容。例如,仅仅因为某些功能被开发并与development 合并,并不意味着我们希望它在master 中,至少在我看来很难实现。
这是一个示例场景:
- 开发人员基于
development创建了一个feature/store分支,并随着时间的推移完成它 - 他们将其变基为
development并将其合并为development和staging - 之后,名为
feature/add-footer-menu的新功能开发开始。这个分支也是基于development,一旦完成,他们将其合并到development、staging和master,因为它需要立即上线
棘手的部分是这样feature/store 的更改也会生效,我们不希望这样。唯一的解决方法是只使用cherry-picks,并且只选择我们想要与staging 和master 合并的提交。这可能会奏效,但在我看来是一种矫枉过正。有没有更简单的流程来实现这一点?
主要目标是对上线的内容进行良好的控制。通常development 和staging 会有相同的commit,但只有特定的功能需要去master。
另外,还有一件事。如果我们执行上述操作,这意味着如果我们想要将一个特性分支合并到 3 个长期存在的分支中,这意味着我们需要拥有各自的特性分支,这样我们就可以对它们进行 rebase 和合并。 3 个长寿命分支 = 3 个短寿命特征分支,仅用于合并。如果不是 Git 专家,这看起来不对。
请分享您的想法和建议。谢谢!
【问题讨论】: