如何使用GitPython管理评审人列表?解决作者/提交者被自动添加至评审人列表的问题
解决Gerrit提交时自动添加提交者为评审人的问题
嘿,这个问题我熟!你遇到的是Gerrit常见的默认行为坑——不少项目会自动把提交者/作者加进评审人列表,而你的代码之前没显式控制评审人范围,所以才会出现提交者也被加入的情况。给你两个靠谱的解决办法,精准控制只加othername:
方法1:Push时用命令行选项指定评审人(推荐)
Gerrit支持在git push时通过-o(也就是--push-option)参数直接指定评审人,这种方式优先级最高,能完全掌控评审人列表。如果你的项目默认会自动添加提交者,还可以额外加个选项移除提交者的评审人身份:
把你代码里的run命令改成这样:
from subprocess import run, PIPE # ... 你原来的代码(创建Actor、提交文件等部分) ... # 构建push命令,显式指定评审人,按需移除提交者 push_args = [ "git", "push", "origin", "HEAD:refs/for/master", "-o", f"reviewers={reviewers[0]}", # 如果你的Gerrit项目会自动加提交者,就加上下面这行(替换成你的邮箱) "-o", f"remove-reviewers={author.email}" ] run(push_args, cwd='/tmp/tree/path', stdout=PIPE, stderr=PIPE)
小说明:
-o reviewers=<用户名/邮箱>:直接告诉Gerrit只加这个用户当评审人-o remove-reviewers=<邮箱>:如果项目有自动加提交者的配置,用这行把提交者从评审人里删掉- 要是你的项目没开自动加提交者的功能,只保留
-o reviewers=othername这一行就够了
方法2:在Commit Message里加评审人字段
Gerrit会自动解析commit message里的特殊字段,Reviewers:就是其中一个。你可以直接在提交消息里指定评审人:
修改你的提交消息定义:
commit_msg = f"""test reviewers Reviewers: {reviewers[0]} """
然后正常执行push就行。不过这个方法需要你的Gerrit实例开启了“解析commit消息里的评审人”功能(大部分默认是开的)。如果还是会自动加提交者,依然可以搭配方法1里的remove-reviewers选项来处理。
额外提醒
- 要确认
othername是Gerrit里有效的用户名或邮箱,不然Gerrit会忽略这个请求 - 要是你的Gerrit版本比较老,可能得用单数的
reviewer而不是复数reviewers,不过新版本都支持复数 - 优先选方法1,因为命令行选项的控制更直接,不受commit消息解析配置的影响
内容的提问来源于stack exchange,提问作者rodee




