GitHub REST API: тег git - содержит

Я пытаюсь определить все теги, которые содержат определенный коммит. Используя инструменты команды git, это можно сделать через:

git tag --contains <commit>

Однако мне нужно сделать это для нескольких репозиториев, поэтому я ожидал, что буду использовать REST API. Есть ли способ собрать ту же информацию через REST API GitHub?

2 ответа

Я нашел этот ответ на связанный вопрос, чтобы дать мне то, что мне было нужно.

Сначала вы получите список тегов для вашего репо:

https://api.github.com/repos/:user/:repo/tags

Затем для каждого тега вы бы сравнили ветку с SHA:

https://api.github.com/repos/:user/:repo/compare/:tagName...:sha_of_commit

Если значение status атрибут в ответе diverged или же ahead, то фиксация не содержится в теге. Если значение status атрибут behind или же identical, то фиксация содержится в теге.

Решение, подобное Чаду, но я узнал, что вызов конечной точки тега будет намного более производительным, чем конечная точка сравнения; Вот решение, которое я принял в PowerShell:

1) Определите ваши переменные git:

Param(
    [string]$repoName,
    [string]$commitSha, 
    [string]$giturl = https://git.<yourgitdomain>.com/api/v3/repos, 
    [string]$githubheaders = @{"Authorization"="<your autho>"}, 
    [string]$owner = "Example"
)

2) Получить все теги (как предложено Чадом):

$tags = (Invoke-Webrequest "$giturl/$owner/$repoName/git/refs/tags" -method get -headers $githubheaders -usebasicparsing).content | ConvertFrom-Json

3) Перебрать каждый тег, но вызывать теги api, чтобы получить его sha; Затем вы можете просто сравнить это с желаемым ша:

foreach ($tag in $tags) {
    $tagJsonResponse = ((Invoke-Webrequest "$giturl/$owner/$repoName/git/tags/$tagSha" -method get -headers $githubheaders -usebasicparsing).content | ConvertFrom-Json)
    $currentTagSha = $tagJsonResponse.object.sha
    if( $currentTagSha -eq $shaFromTag ) {
        $tagLabel = $tag.ref -replace "refs/tags/"
        Write-host $tagLabel
    }

Это дает тот же результат, что и конечная точка сравнения, но без избыточной работы по вычислению разницы в коммитах это выполняется относительно быстрее.

Другие вопросы по тегам