具有跟踪功能分支的 Gerrit?

Gerrit with tracked feature branches?

我们(git/gerrit newbs)正在尝试将 gerrit 与功能分支一起使用。我们尝试实现的工作流程如下:

  1. 用户创建了一个功能分支,使用 git push -u origin users-branch.
  2. 将其直接推送到远程仓库(无需审查)
  3. 随着 master 分支中的更改堆积,用户 git pull --rebase origin master(需要 --rebase,否则 git 会创建一个合并提交,并且不能通过 gerrit 推送合并提交) .
  4. 用户继续使用 git push --force origin users-branch 将他的更改推送到远程仓库(由于前一阶段 --rebase 需要 --force;我正在寻找更好的方法这样做)。
  5. 其他用户可以通过推送自己的更改来为功能分支做出贡献。
  6. 功能准备就绪后,用户使用 git push origin HEAD:refs/for/master 将其推送以供审核。

最后一步不起作用,因为无法再次推送在任何阶段推送到 gerrit 的提交。

gerrit 手册建议修改要再次推送的提交。这看起来很复杂而且容易出错。

如果用户从不将他的更改推送到远程仓库,这一切都有效,因为 gerrit 在推送以供审查之前看不到更改。但这正是我们不喜欢的。

似乎可以为功能分支使用不同的 repo,这样 gerrit 就不会看到重复的更改 ID,但这又似乎是一个不必要的复杂化。

有没有办法安全优雅地做我们想做的事情?

如果您 运行 至少 Gerrit 2.11 you can benefit from the fix for issue 1195 and enable the create-new-change-for-all-not-in-target option to take into account target branch when determining new changes to open

您正在尝试使用 pull-request 工作流程(如 Github、Bitbucket 等)在 Gerrit 上工作。

我们刚刚创建了一个 Gerrit 客户端工具来执行此操作:

https://github.com/Cosium/vet

使用 vet,您可以拥有功能分支,并且可以添加任意数量的提交,而无需修改或变基功能分支。