在等待Gerrit的评论时,我如何处理多个修复工作?

时间:2015-08-31 17:36:09

标签: git gerrit

我一直在寻找网络,但找不到确切的答案。

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

对于Gerrit,除了其他限制之外,我似乎找不到合适的方法来处理2个单独的修复/功能并同时查看它们。据我所知,我必须在主分支之上工作,并且一次只能推送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

然后有两个人会在我的代码被合并到master或开发分支并正确标记之前检查我的代码。

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

2 个答案:

答案 0 :(得分:6)

我只是一个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合并来排序它们。这并不比我和其他一些开发人员试图同时更改同一个文件更糟糕。

答案 1 :(得分:1)

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

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

如果服务器无法完成此操作(例如,在发生冲突时),则必须获取第一个已批准的提交,并将第二个提交并重新绑定/合并到其上。 (这不违反上述规则,因为第一次提交现在是合并。)

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

git checkout -b hotfix/1.1.1

git checkout -b hotfix/1.1.1 HEAD~