2016-03-23 1 views
3

Я пытаюсь идентифицировать все теги, которые содержат определенную фиксацию. Использование команды мерзавца инструментов, это может быть сделано через:GitHub REST API: git tag --contains

git tag --contains <commit> 

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

ответ

0

Я нашел this answer по соответствующему вопросу, чтобы дать мне то, что мне было нужно.

Вы бы первым get a list of tags для репо:

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

Затем для каждого тега, вы бы compare the branch with the SHA:

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

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

0

Аналогичное решение для Чада, но я узнал, что вызов конечной точки тега будет намного более результативным, чем конечная точка сравнения; вот решение, которое я принял в 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, чтобы получить его ша; вы можете просто сравнить, что к желаемому ша:

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 
    } 

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