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

如何统计指定GitHub用户在代码仓库中提交的Pull Request总数量

问题修复与完整实现方案

1 无输出问题原因

  • jq的筛选逻辑包裹在单引号内,Bash不会解析单引号中的$1变量,最终查询条件是匹配用户名为$1的PR,自然无返回结果
  • 原有写法仅输出匹配到的用户名,没有做计数统计,可直接用jq内置的length方法完成计数,无需额外处理

2 分页查询实现逻辑

GitHub API的PR列表接口通过page参数指定查询页码,单页最大返回100条,我们可以从第1页开始循环查询:

  • 每次请求指定页码的PR数据
  • 统计当前页中符合条件的PR数量,累加到总计数中
  • 当当前页返回的PR数组长度小于100时,说明已经遍历完所有分页,结束循环

3 完整脚本pull.sh

#!/bin/bash
# 入参1:要查询的GitHub用户昵称
# 可自行修改下面的仓库owner和仓库名,也可改成入参传入
REPO_OWNER="owner"
REPO_NAME="repo"
USERNAME="$1"
TOTAL=0
PAGE=1

while true; do
    # 请求当前页的PR数据
    RESPONSE=$(curl -s "https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/pulls?state=all&per_page=100&page=${PAGE}")
    # 统计当前页匹配的PR数量
    CURRENT_COUNT=$(echo "$RESPONSE" | jq --arg user "$USERNAME" '[.[] | select(.user.login == $user)] | length')
    # 累加总数
    TOTAL=$((TOTAL + CURRENT_COUNT))
    # 判断是否还有下一页
    PAGE_LENGTH=$(echo "$RESPONSE" | jq 'length')
    if [ "$PAGE_LENGTH" -lt 100 ]; then
        break
    fi
    PAGE=$((PAGE + 1))
done

echo "用户${USERNAME}在${REPO_OWNER}/${REPO_NAME}仓库提交的PR总数为:${TOTAL}"

4 使用方法

  1. 给脚本加执行权限:chmod +x pull.sh
  2. 执行查询:./pull.sh 要查询的用户昵称

注:如果仓库PR总量极大,GitHub API的匿名请求有速率限制,可在curl请求中添加-u "你的GitHub用户名:你的个人访问token"参数提升速率上限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:54:06