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

如何同时获取GitHub文件内容及提交数据?

问题描述

我尝试将GitHub用作静态Markdown文件的CMS,因其集成简单且免费。通过GitHub的REST API可轻松获取文件内容,目前已能通过返回的download_url获取Markdown内容,这部分运行正常。

但我还希望获取文件的提交数据(如最后修改日期),不想手动在Markdown前置元数据中添加该信息。我也试过用GraphQL探索工具,但拿到的数据没什么区别。Contents API会返回仓库中每个文件的sha值,但我不知道如何关联它,用Commits API查询时无结果返回。

我尝试的GQL查询如下:

{
  repository(owner: "[OWNER]", name: "[REPO]") {
    object(expression: "main:[FOLDER-PATH]") {
      ... on Tree {
        entries {
          name
          object {
            commitUrl
            ... on Blob {
              text
            }
          }
        }
      }
    }
  }
}

此处返回的commitUrl即使携带token请求也会返回404。

解决方案

方法一:通过REST API关联文件SHA获取提交记录

拿到Contents API返回的文件sha后,调用/repos/{owner}/{repo}/commits接口,指定path为目标文件路径,同时传入sha参数(文件的sha值)过滤结果。示例请求:

GET /repos/{owner}/{repo}/commits?path={file-path}&sha={file-sha}

接口会返回所有修改过该文件的提交记录,取第一条即可得到最新修改信息,其中commit.committer.date字段就是最后修改日期。

方法二:修正GraphQL查询获取提交信息

之前的GQL查询中commitUrl无效,是因为未正确关联提交节点。可以修改查询直接获取文件的最新提交信息:

{
  repository(owner: "[OWNER]", name: "[REPO]") {
    file(path: "[FILE-PATH]", branch: "main") {
      blob {
        text
      }
      latestCommit {
        committedDate
        committer {
          name
        }
        message
      }
    }
  }
}

如果需要批量获取文件夹下所有文件的信息,可先遍历Tree的entries拿到每个文件的path,再批量请求每个文件的latestCommit数据,示例基础查询:

{
  repository(owner: "[OWNER]", name: "[REPO]") {
    object(expression: "main:[FOLDER-PATH]") {
      ... on Tree {
        entries {
          name
          path
          object {
            ... on Blob {
              text
            }
          }
        }
      }
    }
  }
}

注意事项

  • 确保使用的token拥有足够权限(私有仓库需repo权限)
  • 批量查询时注意GitHub API的速率限制,避免触发限流

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:01:00