V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tommyZZM
V2EX  ›  问与答

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

  •  
  •   tommyZZM · 2019-03-23 11:34:21 +08:00 · 2399 次点击
    这是一个创建于 2100 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    9 条回复    2021-02-08 11:03:53 +08:00
    wheeler
        1
    wheeler  
       2019-03-23 12:16:27 +08:00 via iPhone
    为什么会出现覆盖别人代码的情况呢?如果两人的改动都在等待 review 状态,按理说应该报冲突才对啊。

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

    解决办法是:

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

    例如一个变量已经改了一次,然后另一个同学提交后又改了回来,这种 review 环节也确实很难发现。
    tommyZZM
        6
    tommyZZM  
    OP
       2019-03-23 12:46:45 +08:00
    @whileFalse 而且 Gerrit 入库之后似乎会把每个同学的提交记录都合成一个。
    chiu
        7
    chiu  
       2019-03-23 12:55:00 +08:00
    Gerrit 好像是 Review 还没通过,push 了也不会 push 进 branch,要等一系列审核+1 后,才真正 merge 进去 branch。
    wheeler
        8
    wheeler  
       2019-03-23 13:38:39 +08:00 via iPhone
    jiangbingo
        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 。
    第五,耦合度太大,重构吧。减小接口依赖。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1588 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:43 · PVG 00:43 · LAX 08:43 · JFK 11:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.