Gitlab /refs接口返回内容说明及获取commit对应正确标签的接口查询
问题1:
GET /repository/commits/<sha>/refs返回的branch、tag类型内容含义 - 类型为
branch的条目:仅包含**将该commit作为当前分支最新提交(分支HEAD直接指向该commit)**的分支,不会返回所有提交历史包含该commit的分支,这是接口设计的固有逻辑,不是返回异常。 - 类型为
tag的条目:仅包含直接指向该commit的标签,包含轻量标签、以及附注标签的关联提交为该commit的情况。
你遇到的多标签、不同commit返回同标签的异常,通常是两种原因:一是你传入的sha是附注标签本身的对象sha,而非标签绑定的提交sha;二是仓库存在标签移动操作,旧的缓存未更新导致返回冗余数据。
问题2:查询指定commit对应标签的正确API
推荐使用GET /projects/:id/repository/tags接口,根据你使用的Gitlab版本选择调用方式:
- Gitlab 14.1及以上版本:直接传入
commit_sha参数过滤,调用格式为GET /projects/:id/repository/tags?commit_sha=<目标commit SHA>,接口会直接返回所有绑定了该commit的标签,结果完全准确。 - 低于14.1的版本:全量拉取仓库标签列表,遍历每个标签返回结构中的
commit.id字段,过滤出和目标SHA匹配的条目即可,标签量级不大的情况下性能无压力。
内容的提问来源于stack exchange,提问作者lambda
相关产品推荐
相关产品推荐

