我一直在寻找网络,但找不到确切的答案。
我已经在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%。
答案 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~