如何统计指定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 使用方法
- 给脚本加执行权限:
chmod +x pull.sh - 执行查询:
./pull.sh 要查询的用户昵称
注:如果仓库PR总量极大,GitHub API的匿名请求有速率限制,可在curl请求中添加
-u "你的GitHub用户名:你的个人访问token"参数提升速率上限。
内容的提问来源于stack exchange,提问作者Vivern202
相关产品推荐
相关产品推荐

