使用GitHub REST API通过SHA获取仓库标签失败求助
解决GitHub REST API获取标签详情的SHA不匹配问题
问题本质
你遇到的404错误,核心是两个接口返回的sha字段含义完全不同:
- 「List Repository Tags」返回的
sha是标签指向的commit对象的SHA - 「Get a Tag」接口要求传入的是标签自身的Git对象SHA(只有附注标签才有独立的Git对象SHA,轻量标签没有)
解决方案
方案1:用标签名称直接获取详情(推荐,兼容所有标签类型)
从「List Repository Tags」的返回结果里提取name字段(示例仓库第一个标签名为v3.0.0),调用仓库标签详情接口:
curl \ -H "Accept: application/vnd.github+json" \ "https://api.github.com/repos/octokit/graphql-action/tags/v3.0.0"
这个接口会返回标签的完整信息,包括关联的commit、作者、标签信息等,不管是轻量标签还是附注标签都能正常返回。
方案2:获取标签对象SHA后调用「Get a Tag」(仅适用于附注标签)
如果必须使用「Get a Tag」接口,需要先拿到标签自身的Git对象SHA:
- 先调用标签名称对应的详情接口,拿到标签对象的SHA(仅附注标签会返回该字段):
curl \ -H "Accept: application/vnd.github+json" \ "https://api.github.com/repos/octokit/graphql-action/tags/v3.0.0"
- 用返回结果中的标签对象SHA替换commit SHA,调用「Get a Tag」接口:
curl \ -H "Accept: application/vnd.github+json" \ "https://api.github.com/repos/octokit/graphql-action/git/tags/[标签对象SHA]"
注意:轻量标签没有独立的Git对象,无法通过「Get a Tag」接口获取信息,只能用方案1。
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

