如何使用GitHub REST-API下载两个标签版本间的所有修改文件
实现方案
前置准备
- 生成GitHub个人访问令牌(PAT),权限勾选
repo范围,私有仓库必须携带令牌才能请求,公共仓库携带令牌可获得更高的API请求限额 - 确认仓库的所有者名(owner)、仓库名(repo)、两个待比对标签的名称(如
v1.0.0为base版本标签,v2.0.0为head版本标签)
步骤1:获取两个版本的变更文件列表(已持有列表可直接跳过)
调用GitHub Compare API即可直接得到两个标签之间的全部变更文件,请求示例(curl格式):
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer 替换为你的PAT令牌" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/替换为owner名/替换为仓库名/compare/替换为base标签...替换为head标签
返回结果的files数组即为所有变更文件,每个条目内的filename字段为文件的相对路径。
步骤2:批量下载变更文件
调用GitHub Contents API即可下载指定版本的对应文件,接口规则为:
- 要下载base版本的文件,请求参数
ref填base标签名 - 要下载head版本的文件,请求参数
ref填head标签名 - 请求头添加
Accept: application/vnd.github.raw可直接获取原始文件内容,无需自行解码base64
单文件下载请求示例:
curl -L \ -H "Accept: application/vnd.github.raw" \ -H "Authorization: Bearer 替换为你的PAT令牌" \ -H "X-GitHub-Api-Version: 2022-11-28" \ "https://api.github.com/repos/替换为owner名/替换为仓库名/contents/替换为文件相对路径?ref=替换为对应版本标签" \ -o 本地保存路径/文件名
如果是批量下载,直接遍历你已有的变更文件路径列表,循环执行上述请求即可。
注意事项
- 未认证的GitHub API请求每小时限额60次,认证请求每小时限额5000次,文件数量较多时必须携带PAT避免被限流
- 单文件大小超过100MB时无法使用Contents API下载,需要调用Git Blob API获取对应文件内容
- 下载时注意保持本地的文件目录结构和仓库内的相对路径一致,避免文件保存混乱
内容的提问来源于stack exchange,提问作者Merav Taviv
相关产品推荐
相关产品推荐

