如何通过Github API获取仓库中单个文件指定时间段的版本diff
解决方案
以下两种方案均可规避提交对比API的300文件数量限制,实现单个文件指定时间段的diff查询:
方案1:使用带路径过滤的提交对比API(最简便)
该方法无需拉取全量提交差异,直接过滤目标文件结果,性能开销最低
- 按你原有逻辑,分别查询到目标时间段起始(如7月1日0点)和结束(如7月15日0点)对应的commit SHA,记为
base_sha和head_sha - 调用提交对比API时追加
path参数指定目标文件的完整路径,示例请求格式如下:GET /repos/{仓库所有者用户名}/{仓库名}/compare/{base_sha}...{head_sha}?path={目标文件相对仓库根目录的路径} - 该请求只会返回指定路径文件的差异内容,不受两个提交区间总改动文件数超过300的限制。
方案2:拉取两个时间点的文件内容本地生成diff(兜底方案)
如果遇到特殊场景方案1不可用,可选择该完全不受API限制的方案:
- 分别调用仓库内容API获取两个commit SHA下目标文件的原始内容,请求格式如下:
GET /repos/{仓库所有者用户名}/{仓库名}/contents/{目标文件相对仓库根目录的路径}?ref={commit_sha} - 拿到两个版本的文件内容后,在本地运行diff工具生成差异即可。
内容的提问来源于stack exchange,提问作者msmyamada
相关产品推荐
相关产品推荐

