如何使用GitHub Rest API配合curl实现类似git rev-list的功能
实现方法
完全可以通过GitHub REST API的/repos/{owner}/{repo}/commits端点结合curl实现git rev-list的核心效果,以下是具体用法:
1. 基础等价:git rev-list <分支名>(列出指定分支所有提交哈希,倒序排列)
你可以直接调用该端点,配合分页拉取所有提交的sha值即可,完整脚本示例适配你已有的使用习惯:
# 先配置你的参数 api_user="你的GitHub用户名" api_token="你的GitHub个人访问令牌" owner="仓库所有者名" repo="仓库名" api_branch="要查询的分支名" api_url="https://api.github.com/repos/${owner}/${repo}" # 先获取总页数,per_page最大可设为100减少请求次数 total_page=$(curl -I -k -u ${api_user}:${api_token} "${api_url}/commits?sha=${api_branch}&per_page=100" | sed -n '/^[Ll]ink:/ s/.*"next".*page=\([0-9]*\).*"last".*/\1/p') # 如果没有next页说明只有1页 total_page=${total_page:-1} # 遍历所有页提取提交哈希,输出结果和git rev-list ${api_branch}完全一致 for page in $(seq 1 $total_page); do curl -s -k -u ${api_user}:${api_token} "${api_url}/commits?sha=${api_branch}&per_page=100&page=${page}" | jq -r '.[].sha' done
脚本中用到的
jq是通用JSON处理工具,Linux/macOS可直接通过系统包管理器安装。
2. 匹配git rev-list常用过滤参数的配置
你可以通过调整请求参数实现git rev-list的常用过滤效果:
- 等价于
git rev-list --since="2024-01-01":在请求URL后追加&since=2024-01-01T00:00:00Z,时间需符合ISO 8601格式 - 等价于
git rev-list --until="2024-01-31":在请求URL后追加&until=2024-01-31T23:59:59Z - 等价于
git rev-list --author="用户名":在请求URL后追加&author=用户名,支持匹配用户名或邮箱前缀 - 等价于
git rev-list --abbrev-commit(输出短哈希):把jq提取逻辑改为.[].sha[:7]即可获取7位短哈希 - 等价于
git rev-list --count <分支名>:统计所有分页返回的提交数组长度相加即可,单页长度可通过jq length直接获取
3. 区间提交查询说明
如果要实现git rev-list <commit1>..<commit2>的区间查询效果,把sha参数设置为较新的commit2,拉取全量提交链后过滤掉commit1之前的记录即可。
内容的提问来源于stack exchange,提问作者Emil
相关产品推荐
相关产品推荐

