在 Gerrit 中等待审查时,如何处理多个修复程序?

How do I work in multiple fixes while waiting for a review in Gerrit?

我一直在网上四处寻找,找不到确切的答案。

几年来,我一直在 git flow model 下使用 git。我最近换了工作,在这里,我们使用 Gerrit。

对于 Gerrit,除其他限制外,我似乎没有找到正确的方法来处理 2 个单独的 fixes/features 并同时查看它们。据我了解,我必须在 master 分支之上工作,并且一次只能推送 1 个提交(除非我修补我的初步审查)。这与 git 对我来说非常不同。

在 git 我可以做到:

# work in a feature
git checkout -b feature/awesome
echo "nice" > nice.txt
git add nice.txt
git commit -m "My nice change"
git push -u origin feature/awesome

# work on a hotfix
git checkout -b hotfix/1.1.1
echo "fixed" > fixed.txt
git add fixed.txt
git commit -m "It's fixed"
git push -u origin hotfix/1.1.1

然后 2 个人会在我的代码被合并到 master 或 develop 分支并正确标记之前审查我的代码。

我知道我只需要学习这个新的 Gerrit 模型,但是有人可以帮我弄清楚如何同时处理 2 个不同的评论吗?我觉得我的工作效率刚刚下降到 20%。

我只是一个 gerrit 用户,不是管理员,所以也许我在这里不合时宜,但是为什么你不能同时在 gerrit 中进行多个打开的更改?我现在在同一个项目中有四个打开的更改。

我不保留本地分支机构。事实上,当我晚上回家时,我的工作树中很少任何东西重要。

当我想开始新的改变时:

git reset --hard
git fetch
git checkout master
git reset --hard origin/master

# make my changes

git add ...
git commit
git push origin HEAD:refs/publish/master

当我想处理 gerrit 中已有的一些其他更改时:

git reset --hard
git fetch ssh://mylogin@gerrit.my.employer.com/project refs/changes/nn/nnnnn/pp
git checkout FETCH_HEAD

# make my changes

git add ...
git commit
git push origin HEAD:refs/publish/master

那些 reset --hard 行很少有问题,因为就像我说的,我没有在我的本地工作树中保留任何重要的东西。

唯一的技巧是,如果我有两个或更多涉及同一个文件的打开更改,我可能必须执行手动 git 合并以将它们整理出来。这并不比我和其他一些开发人员试图同时更改同一个文件更糟糕。

简单的规则是:永远不要在审查中的提交之上工作。相反,从合并的master(或其他)分支为每个任务创建一个本地分支。

IIRC,Gerrit 中的默认设置是自动合并这些提交,作为管理员,您可以将其更改为 rebase(或更严格的 fast-forward-only 合并)。

如果服务器无法完成此操作(例如,在发生冲突时),您将必须获取第一个批准的提交并 rebase/merge 获取第二个。 (这并不违反上述规则,因为第一个提交现在 merged。)

因此,对于您的示例,更改

git checkout -b hotfix/1.1.1

git checkout -b hotfix/1.1.1 HEAD~