You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多个开发者如何在Gerrit的同一feature分支上协同工作

Gerrit 协同场景配置操作指引

一、所有协作开发者通用基础配置

  • 安装Gerrit commit-msg钩子,用于自动生成/保留Change-Id
    执行命令:
    # 替换尖括号内容为你的Gerrit实际信息
    scp -p -P <Gerrit SSH端口> <你的Gerrit账号>@<Gerrit域名>:hooks/commit-msg .git/hooks/
    chmod +x .git/hooks/commit-msg
    
    该钩子会自动在提交信息末尾添加Change-Id行,只要提交时不修改这一行,后续的amend提交都会自动关联到同一个Gerrit变更
  • 配置pull默认走变基逻辑,避免产生多余合并提交破坏Change-Id连续性
    执行命令:
    # 仅当前仓库生效
    git config pull.rebase true
    # 如需全局所有仓库生效,添加--global参数
    # git config --global pull.rebase true
    

Gerrit的存储逻辑和GitHub/GitLab有本质区别:未完成评审合入的变更不会存放在普通分支的refs下,统一存储在独立的refs/changes/命名空间,这也是直接拉取feature/test分支看不到待评审变更的核心原因。

二、多开发者基于同一Change ID协同配置

  • 拉取指定Gerrit变更的最新内容
    不要直接拉取远程feature/test分支,直接拉取对应Change的补丁集,命令格式如下,也可以直接复制Gerrit变更详情页提供的Checkout命令:
    git fetch <Gerrit项目地址> refs/changes/<Change-ID最后两位>/<Gerrit变更编号>/<补丁集版本> && git cherry-pick FETCH_HEAD
    
  • 提交修改到同一Change ID
    改动代码后不要新建提交,使用amend参数修改原有提交,保证Change-Id不变:
    git add <修改的文件>
    git commit --amend
    # 不要修改提交信息末尾的Change-Id行
    git push origin HEAD:refs/for/feature/test
    
    推送后会自动在原有Gerrit变更下生成新的补丁集,所有协作者拉取最新补丁集即可拿到更新内容。
  • 冲突处理规则
    拉取最新补丁集出现冲突时,解决冲突后执行git rebase --continue,再用git commit --amend提交,保持Change-Id不变即可。

三、其他设备看不到Gerrit变更的解决配置

  • 先校验远程仓库地址配置正确:
    执行git remote -v查看origin地址是否为Gerrit的项目地址,配置错误的话执行以下命令修改:
    git remote set-url origin <Gerrit项目地址>
    
  • 拉取指定变更内容:
    不要使用git pull origin feature/test拉取,按照上文提到的拉取补丁集命令操作,即可拿到待评审的变更内容。
  • 如需本地分支自动跟踪该变更的更新,执行关联配置:
    git branch --set-upstream-to=refs/changes/<Change-ID最后两位>/<Gerrit变更编号>/<最新补丁集版本> feature/test
    
    后续直接执行git pull --rebase即可拉取该变更的最新补丁内容。

内容的提问来源于stack exchange,提问作者keepmoving

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:18:03