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
}
Это дает тот же результат, что и конечная точка сравнения, но без избыточной работы по вычислению разницы в коммитах это выполняется относительно быстрее.