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

如何通过GitHub API低请求量获取仓库完整递归文件列表

递归获取GitHub仓库全量文件列表(最小请求数实现)

针对小型SVG资源仓库拉取全量文件、避免大量API请求的需求,直接用GitHub Tree API原生的递归参数即可,最多2次请求就能拿全所有层级的文件,完全不需要逐级遍历目录。

核心认知纠正

直接传commit SHA给tree接口确实无法正常返回结果——commit和tree是Git里两类独立的对象,但根目录对应的tree SHA根本不需要复杂查询,它直接存在分支最新提交的返回结构里。

具体实现步骤

1. 获取仓库根目录的tree SHA

直接请求目标分支的最新commit接口即可,以默认分支main为例:

curl -s https://api.github.com/repos/<你的用户名>/<仓库名>/commits/main

在返回的JSON结构中,取.commit.tree.sha字段的值,就是整个仓库根目录对应的tree SHA。

要查询其他分支、指定tag的文件树,直接把URL末尾的main替换成对应分支名、tag名即可。

2. 单请求拉取全量递归文件结构

拿到根tree SHA后,调用tree接口时带上recursive=1查询参数,接口会自动递归展开所有层级的子目录,一次性返回全量文件列表:

curl -s https://api.github.com/repos/<你的用户名>/<仓库名>/git/trees/<上一步获取的根tree SHA>?recursive=1

返回结果的tree数组就是所有文件和目录的集合:

  • path字段是对应条目相对于仓库根目录的完整路径
  • type值为blob的是文件,值为tree的是子目录
  • 同时会返回文件大小、对应blob的SHA值,足够支撑资源仓库的文件索引需求

方案适配性说明

  • 这套方案对6级目录、约200个文件的场景完全适用,GitHub的递归tree接口最大支持返回单仓库10万个条目,不会出现截断
  • 公开仓库调用不需要鉴权,私有仓库在curl命令中添加请求头-H "Authorization: Bearer <你的GitHub个人访问令牌>"即可
  • 全程最多产生2次API请求,完全不会出现逐级遍历目录导致的数十上百次请求的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:48:19