我正在尝试使用Gerrit实现类似于'git-flow'的工作流程,但似乎无法解决最后一个难题。
我的问题有两个前提条件:
- Gerrit只会执行到一个分支的合并操作
- 我不允许将合并提交推送到Gerrit。在经过审核后,必须由Gerrit进行合并操作
我想要解决的问题是如下的Git情况:
Master 0
\
\
Develop 0-----0-----0-----0
有一个主分支(master branch),包含一次提交(commit),还有一个develop分支,是从master分支衍生出来的,并添加了多个附加提交。过一段时间,将develop分支合并回master分支,以创建下一个生产发布版本。开发人员使用develop主题分支(topic branches)严格地进行变基(rebasing)操作。在推送之前,他们的提交(commit)总是在最新的上游develop分支之上进行变基。这应该会导致线性历史(linear history)和仅快进提交(fast forward commits)。
现在假设有人从master分支创建了一个热修复分支(hotfix branch),并将其合并回master分支:
Master 0--------0 HF
\
\
Develop 0-----0-----0-----0
这个提交现在只合并到了主干分支,但开发人员需要将这个提交合并到他们的开发分支中,以整合这个错误修复。通常情况下,您会将主干分支合并到开发分支,但考虑到我的前提条件,这是不可能的,因为它会创建一个本地合并提交。我的问题是:我该如何将主干分支中的新提交合并到本地开发分支中,以便开发人员的任何新更改都包含这个错误修复?理想情况下,我希望修改我的脚本,首先将错误修复更改应用于本地开发分支(合并但不产生合并提交),然后再变基开发者的提交并进行推送。这样,错误修复将自动添加到他们的新更改中,并被视为他们的新提交的一部分,而不是单独的提交。我一直在思考可能的解决方案:
- 将提交选择到开发分支。我认为,这将始终导致当开发分支下一次与主分支合并时出现重复提交。有什么办法可以解决这个问题吗? - 如此描述的变基:http://davitenio.wordpress.com/2008/09/27/git-merge-after-git-cherry-pick-avoiding-duplicate-commits/。这可能会引起问题,因为开发分支已经发布了,或者不会吗?
我希望我的问题很清楚。如果需要进一步说明,请告诉我。我知道我的工作流程非常严格,但与 Gerrit 结合使用会非常理想。如果不能做到这一点,那么我可能会允许合并提交...