2016-03-23 4 views
3

特定のコミットを含むすべてのタグを識別しようとしています。 gitのコマンドツールを使用して、これを介して行うことができます:私は、RESTのAPIに依存する上で期待していたので、GitHub REST API:gitタグ - 含まれています

git tag --contains <commit> 

しかし、私はいくつかのリポジトリのためにこれを行う必要があります。 GitHubのREST APIを使って同じ情報を収集する方法はありますか?

答えて

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属性の値がdivergedaheadある場合コミットはタグに含まれていません。 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を呼び出して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 
    } 

これは比較するエンドポイントと同じ結果を得るが、コミットの差分を計算する冗長な作業をせずに、これは比較的迅速に実行します。あなたは、単に希望舎にいることを比較することができます。

関連する問題