最近在工作中,新单位的前端项目是通过 Gerrit 管理的。
刚刚参加没多久,就发现了几次这样的现象:开发成员提交的代码容易在 Gerrit 审核环节过程中把互相之间的代码覆盖掉。导致某一些已经被修复过的问题的反复出现。
参与项目的成员似乎无法通过 rebase 其他成员的分支来自行处理潜在的冲突,只能在审核阶段由审核的同学手动处理?
而且在代码入库(审核通过合并分支)之前,似乎也没法感知得到其他成员负责模块的开发进度?
请教一下大家 Gerrit 工作流正常情况下应该是怎么样的?
Gerrit 工作流中有没有办法体现 GitLab 那样的 PR 机制?
1
wheeler 2019-03-23 12:16:27 +08:00 via iPhone
为什么会出现覆盖别人代码的情况呢?如果两人的改动都在等待 review 状态,按理说应该报冲突才对啊。
如果想在入库之前获取别人的改动,可以选择 gerrit 的 commit 对应的 download 功能了。 |
2
whileFalse 2019-03-23 12:17:45 +08:00 via iPhone 2
这种问题我司也出现过。就是解决冲突的时候用自己代码无脑覆盖的缘故,和 review 无关。
解决办法是: 1. 把前端几千行代码的 js 拆开,以降低冲突几率。 2. 给前端童鞋宣讲如何处理冲突 3. 跟据 git blame 抓住无脑覆盖的提交者,杀了祭天 |
3
whileFalse 2019-03-23 12:21:49 +08:00 via iPhone
是用 git blame 还是得 git log 我不记得了。
|
4
binux 2019-03-23 12:27:11 +08:00 via Android
@whileFalse 看到他覆盖别人的代码,review 还给过?
|
5
tommyZZM OP |
6
tommyZZM OP @whileFalse 而且 Gerrit 入库之后似乎会把每个同学的提交记录都合成一个。
|
7
chiu 2019-03-23 12:55:00 +08:00
Gerrit 好像是 Review 还没通过,push 了也不会 push 进 branch,要等一系列审核+1 后,才真正 merge 进去 branch。
|
8
wheeler 2019-03-23 13:38:39 +08:00 via iPhone
|
9
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 。 第五,耦合度太大,重构吧。减小接口依赖。 |