Gerrit 多人协作,开发成员有没有办法感知得到互相之间已提交但未入库的代码?

2019-03-23 11:34:21 +08:00
 tommyZZM

最近在工作中,新单位的前端项目是通过 Gerrit 管理的。

刚刚参加没多久,就发现了几次这样的现象:开发成员提交的代码容易在 Gerrit 审核环节过程中把互相之间的代码覆盖掉。导致某一些已经被修复过的问题的反复出现。

参与项目的成员似乎无法通过 rebase 其他成员的分支来自行处理潜在的冲突,只能在审核阶段由审核的同学手动处理?

而且在代码入库(审核通过合并分支)之前,似乎也没法感知得到其他成员负责模块的开发进度?

请教一下大家 Gerrit 工作流正常情况下应该是怎么样的?

Gerrit 工作流中有没有办法体现 GitLab 那样的 PR 机制?

2396 次点击
所在节点    问与答
9 条回复
wheeler
2019-03-23 12:16:27 +08:00
为什么会出现覆盖别人代码的情况呢?如果两人的改动都在等待 review 状态,按理说应该报冲突才对啊。

如果想在入库之前获取别人的改动,可以选择 gerrit 的 commit 对应的 download 功能了。
whileFalse
2019-03-23 12:17:45 +08:00
这种问题我司也出现过。就是解决冲突的时候用自己代码无脑覆盖的缘故,和 review 无关。

解决办法是:

1. 把前端几千行代码的 js 拆开,以降低冲突几率。
2. 给前端童鞋宣讲如何处理冲突
3. 跟据 git blame 抓住无脑覆盖的提交者,杀了祭天
whileFalse
2019-03-23 12:21:49 +08:00
是用 git blame 还是得 git log 我不记得了。
binux
2019-03-23 12:27:11 +08:00
@whileFalse 看到他覆盖别人的代码,review 还给过?
tommyZZM
2019-03-23 12:45:30 +08:00
@binux @whileFalse 不一定会触发冲突,有时候只是一个同一条代码重复修改。

例如一个变量已经改了一次,然后另一个同学提交后又改了回来,这种 review 环节也确实很难发现。
tommyZZM
2019-03-23 12:46:45 +08:00
@whileFalse 而且 Gerrit 入库之后似乎会把每个同学的提交记录都合成一个。
chiu
2019-03-23 12:55:00 +08:00
Gerrit 好像是 Review 还没通过,push 了也不会 push 进 branch,要等一系列审核+1 后,才真正 merge 进去 branch。
wheeler
2019-03-23 13:38:39 +08:00
jiangbingo
2021-02-08 11:03:53 +08:00
第一,任务拆分时具体到模块,类和对象;
第二, gerrit 提交时看到 confict 处理 incoming (意味着从上次 Pull 到现在已经有人改动了)。并且 MR 前有其他 ticket 冲突时不得提交,要么 merge 别人,要么别人 merge 你的,没有 confict 提示才能 MR 。
第三,关于不触发 confict 这点,编辑器开启 git blame,比如 vs code 的 gitlens 提示。
第四,更小颗粒度的迭代开发。经常提交和 MR 。
第五,耦合度太大,重构吧。减小接口依赖。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/547666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX