You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过GitHub API获取指定文件的全部提交记录?

嘿,这个问题我太熟悉了!GitHub API默认确实只返回30条提交结果,要拿到那3000条完整记录,得靠这几个方法,我给你一步步说清楚:

方法1:利用GitHub REST API的分页机制

GitHub REST API的分页是核心解决方案,默认每页30条,但我们可以调整参数来减少请求次数:

  • 首先,请求时加上per_page=100参数(这是API允许的最大单页数量),这样每次能拿100条,3000条只需要30次请求:
    https://api.github.com/repos/raspberrypi/linux/commits?path=drivers/gpu/drm/i915/intel_display.c&per_page=100
    
  • 然后,查看响应的HTTP头里的Link字段,里面会包含next(下一页链接)、last(最后一页链接)等标记。你只需要跟着next链接不断请求,直到返回的结果为空数组,或者Link里没有next为止。
  • 小提示:未认证的API请求每小时只能调用60次,30次请求完全够用;如果怕限流,最好用**个人访问令牌(PAT)**认证,这样每小时能调用5000次,更稳妥。
方法2:直接用Git命令(最简单高效)

如果只是需要导出或查看该文件的所有提交,直接用Git命令比调用API省事多了:

  1. 先克隆仓库(如果还没克隆的话):
    git clone https://github.com/raspberrypi/linux.git
    
  2. 进入仓库目录后,用git log只筛选这个文件的提交:
    # 简洁格式展示,每条提交一行
    git log --oneline -- drivers/gpu/drm/i915/intel_display.c
    
  3. 如果需要结构化数据(比如JSON),可以用git log的格式化参数自定义输出:
    git log --pretty=format:'{"commit_id":"%H","author":"%an","commit_date":"%ad","message":"%s"},' -- drivers/gpu/drm/i915/intel_display.c
    
    把输出稍微整理一下(去掉最后一个逗号,包裹上[])就是标准的JSON数组,方便后续处理。
方法3:使用GitHub GraphQL API(更灵活)

如果你需要自定义返回的字段(比如只拿提交ID、作者、消息),GraphQL API会更高效,它支持通过游标(cursor)分页:
下面是一个示例查询,你可以在GitHub的GraphQL Explorer里直接测试:

query GetFileCommits($cursor: String) {
  repository(owner: "raspberrypi", name: "linux") {
    ref(qualifiedName: "main") {
      target {
        ... on Commit {
          history(
            path: "drivers/gpu/drm/i915/intel_display.c"
            first: 100
            after: $cursor
          ) {
            pageInfo {
              hasNextPage
              endCursor
            }
            nodes {
              oid
              author {
                name
                date
              }
              messageHeadline
            }
          }
        }
      }
    }
  }
}
  • 第一次请求时cursor留空,拿到结果后如果pageInfo.hasNextPagetrue,就把pageInfo.endCursor作为下一次请求的cursor参数,直到hasNextPage变为false,这样就能拿到所有提交。

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

火山引擎 最新活动