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

如何通过Gerrit REST API按仓库、分支及起止日期获取变更记录

解决Gerrit REST API获取指定仓库、分支和时间范围变更记录的问题

我来帮你搞定这个问题!你之前调用的projects/{project name}接口确实只会返回项目的元数据信息,要获取变更记录得用Gerrit专门的变更查询端点,而且参数是通过查询参数传递,不是像你设想的那样放到URL路径里哦。

正确的API用法说明

Gerrit获取变更记录的核心端点是/changes/,你需要通过查询参数来过滤项目、分支和时间范围,关键参数如下:

  • project: 指定目标仓库的名称(比如my-project)
  • branch: 过滤指定分支的变更,格式必须是refs/heads/分支名(比如refs/heads/main或者refs/heads/feature/dev)
  • since: 起始时间,必须是ISO 8601格式(比如2024-05-01T00:00:00Z)
  • until: 结束时间,同样使用ISO 8601格式
  • 可选参数status:all: 如果需要获取所有状态的变更(开放、合并、废弃),加上这个参数;默认情况下Gerrit只返回开放状态的变更
  • 可选参数n: 指定单次返回的变更数量(默认最多25条,如需更多可设置n=100,超过的话需要分页处理)

代码示例

用你正在使用的GerritRestAPI库,正确的调用方式应该是这样的:

from gerrit import GerritRestAPI

# 初始化API客户端
gerrit_url = "https://your-gerrit-instance.com"
rest = GerritRestAPI(url=gerrit_url)

# 定义查询参数
params = {
    "q": [
        f"project:{your_project_name}",
        f"branch:{your_branch_name}",  # 注意格式是refs/heads/xxx
        f"since:{start_date}",         # 比如"2024-05-01T00:00:00Z"
        f"until:{end_date}",           # 比如"2024-05-31T23:59:59Z"
        "status:all"                   # 可选,获取所有状态的变更
    ]
}

# 发起请求获取变更记录
changes = rest.get("changes/", params=params)

# 打印结果示例
for change in changes:
    print(f"变更ID: {change['id']}, 主题: {change['subject']}, 状态: {change['status']}")

注意事项

  1. 时间格式必须正确:Gerrit严格要求ISO 8601格式,带时区标识(比如Z代表UTC时间),如果用本地时间可能会导致过滤结果不准确。
  2. 分支名称的前缀:一定要加上refs/heads/,直接写分支名会查不到结果。
  3. 权限验证:确保你的Gerrit账号有权限访问目标仓库的变更记录,如果是私有仓库,需要在初始化GerritRestAPI时带上认证信息(比如用户名和HTTP密码/访问令牌)。
  4. 分页处理:如果符合条件的变更超过25条,Gerrit会只返回前25条,此时需要通过start参数分页获取后续结果(比如params['start'] = 25获取下一页)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:48:01