如何通过Octokit的request API获取合并PR到基础分支的用户名
获取已合并PR的合并者用户名(Octokit.request 实现)
要获取已合并PR的合并者用户名,核心是利用GitHub REST API返回的merged_by字段(该字段包含合并者的用户信息,其中login即为用户名)。以下是两种可行的实现方式:
方式一:在PR列表请求中直接获取合并者信息
如果希望一次性从列表接口拿到合并者数据,需要在请求头中指定完整字段的媒体类型,确保merged_by被返回:
const octokit = require("@octokit/rest")({ auth: "YOUR_GITHUB_TOKEN" }); async function fetchMergedPRMergers() { const owner = "你的仓库所有者用户名"; const repo = "仓库名称"; let page = 1; const mergedPRMergers = []; while (true) { const response = await octokit.request("GET /repos/{owner}/{repo}/pulls", { owner, repo, state: "all", per_page: 100, // 单页最大返回100条,适配分页 page, headers: { Accept: "application/vnd.github.full+json" // 请求完整字段,包含merged_by } }); // 筛选已合并PR并提取合并者用户名 const pageMergers = response.data .filter(pr => pr.merged_at !== null) .map(pr => ({ pr编号: pr.number, 合并者用户名: pr.merged_by?.login || "未知" })); mergedPRMergers.push(...pageMergers); // 终止分页循环:当返回结果不足100条时,说明已到最后一页 if (response.data.length < 100) break; page++; } console.log(mergedPRMergers); } fetchMergedPRMergers();
方式二:先获取已合并PR编号,再逐个请求详情
如果列表接口未返回merged_by(或你只需要特定PR的合并者),可以先收集已合并PR的编号,再单独请求每个PR的详情接口获取合并者信息:
const octokit = require("@octokit/rest")({ auth: "YOUR_GITHUB_TOKEN" }); async function fetchMergedPRMergers() { const owner = "你的仓库所有者用户名"; const repo = "仓库名称"; let page = 1; const mergedPRNumbers = []; // 第一步:收集所有已合并PR的编号 while (true) { const prListResponse = await octokit.request("GET /repos/{owner}/{repo}/pulls", { owner, repo, state: "all", per_page: 100, page }); const pageMergedPRs = prListResponse.data .filter(pr => pr.merged_at !== null) .map(pr => pr.number); mergedPRNumbers.push(...pageMergedPRs); if (prListResponse.data.length < 100) break; page++; } // 第二步:逐个请求PR详情,提取合并者用户名 const mergedPRMergers = []; for (const prNumber of mergedPRNumbers) { const prDetailResponse = await octokit.request("GET /repos/{owner}/{repo}/pulls/{pull_number}", { owner, repo, pull_number: prNumber }); mergedPRMergers.push({ pr编号: prNumber, 合并者用户名: prDetailResponse.data.merged_by?.login || "未知" }); } console.log(mergedPRMergers); } fetchMergedPRMergers();
注意事项
- 替换
YOUR_GITHUB_TOKEN为你的个人访问令牌,需具备仓库的读取权限(私有仓库需repo权限)。 - 处理GitHub API的速率限制:如果PR数量较多,建议添加请求延迟,或检查响应头的
X-RateLimit-Remaining字段避免触发限制。 - 兜底处理:极少数情况下,可能存在
merged_at非空但merged_by为空的情况,代码中通过|| "未知"做了兼容。
内容的提问来源于stack exchange,提问作者Amit Limbasiya
相关产品推荐
相关产品推荐

