特定のコミットを含むすべてのタグを識別しようとしています。 gitのコマンドツールを使用して、これを介して行うことができます:私は、RESTのAPIに依存する上で期待していたので、GitHub REST API:gitタグ - 含まれています
git tag --contains <commit>
しかし、私はいくつかのリポジトリのためにこれを行う必要があります。 GitHubのREST APIを使って同じ情報を収集する方法はありますか?
特定のコミットを含むすべてのタグを識別しようとしています。 gitのコマンドツールを使用して、これを介して行うことができます:私は、RESTのAPIに依存する上で期待していたので、GitHub REST API:gitタグ - 含まれています
git tag --contains <commit>
しかし、私はいくつかのリポジトリのためにこれを行う必要があります。 GitHubのREST APIを使って同じ情報を収集する方法はありますか?
私は私が必要なものを私に与えるために関連する質問に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
の場合、コミットはタグに含まれます。
チャドと同様のソリューションが、私は、タグのエンドポイントを呼び出すと比較するエンドポイントよりも多くのパフォーマンスになることを学びました。ここで私は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
}
これは比較するエンドポイントと同じ結果を得るが、コミットの差分を計算する冗長な作業をせずに、これは比較的迅速に実行します。あなたは、単に希望舎にいることを比較することができます。