格里特:与多个分支机构合作传播变化

时间:2012-07-28 10:35:14

标签: merge branch branching-and-merging gerrit

我正在尝试确定在Gerrit上使用与我们的工作流程相匹配的多个分支的正确方法。

我们现在与分支机构合作的方式是:我们拥有主人和专业人士。特色分支。 Master是我们想要打磨并准备发布的分支,而功能显然是一个密集工作领域。现在,在我们的特殊情况下,每当有人处理错误修复时,他们都会:

  • 创建针对主分支的更改
  • cherry将其选择到功能分支目标更改
  • 一旦gerrit代码审核完成,请提交两个更改。

现在我理解樱桃选择的方式,它选择单独的提交并将其合并到当前的更改。如果是这种情况,我希望最终没有合并冲突,事实上这个工作流程只与GIT完美配合。然而,Gerrit很可能是由于它的本质(分支不是以本地方式远程合并并获得不同的sha标签)最终列出了大量冲突文件。

现在,我通过应用合并策略(我们的功能,他们的主人)解决了所有这些问题,但它感觉不对:如果没有传播任何东西,它就会被丢弃。

我的问题是:是否有安全工作流程,类似于上面的工作流程,最终会产生与gerrit的干净合并?

2 个答案:

答案 0 :(得分:9)

我想说,在这种情况下,合并比樱桃选择更好。

一个樱桃选择添加相同的更改,但不是相同的提交。因此,虽然源代码在樱桃选择和合并上是相同的,但 git tree 是不同的。当树不同并且您稍后进行合并时,git会认为您之前所选择的提交缺失并尝试合并该更改,即使实际代码已经存在。这可能是你遇到很多冲突的原因。

我会提出另一种工作方式。

  • 当您正常工作时,您会在功能上进行开发并正常推送到Gerrit。
  • 当您在稳定的生产环境中执行修补程序(即错误修复)时,您可以直接在(或本地分支,如果您喜欢但不在功能)上执行此操作
  • 当Gerrit批准的补丁被合并到真正的中时,您可以发出 pull 请求以获得对本地副本的更改。您的版本现在与Gerrits master
  • 相同
  • 现在,您将上的所有新更改合并到功能。确保您执行了 rebase ,以便在您已经完成功能
  • 之前完成修补程序
  • 一旦部署了所有新功能,您可以将功能合并到中,推送到Gerrit(如果您有权限,可以通过直接推送到< strong> master 而不是refs / for / master,因为已经审核了这些更改)
  • 对Gerrits master 进行所有更改后,您可以对进行拉动,并使用 rebase 合并到功能 em>使功能成为一个干净的分支。每个版本都有一个新的功能当然是完全有效的。两者都很好。

答案 1 :(得分:0)

我有点困惑,因为这个流程应该可以正常工作。如果其他用户在审核/验证/提交错误修复之前提交更改,则可能会导致合并冲突,但这种情况应该很少见。

如果你:

  1. 修复主人的错误
  2. 推送审核(在gerrit中创建更改A)
  3. 在功能分支顶部进行樱桃挑选更改A(解决从主人到功能的任何冲突)
  4. 推送樱桃挑选的更改以进行审核(创建更改B)
  5. 审核/验证/提交更改A&amp;乙
  6. 一切都会好起来的。发生合并冲突的唯一方法是其他用户是否在步骤1和5之间上传和提交更改。您是否看到了不同的行为?你能提供更多细节吗?