GitHub REST API:git tag --contains

时间:2016-03-23 17:31:32

标签: github github-api

我正在尝试识别包含特定提交的所有标记。使用git命令工具,可以通过以下方式完成:

git tag --contains <commit>

但是,我需要为几个存储库执行此操作,因此我期待依赖REST API。有没有办法通过GitHub的REST API收集相同的信息?

2 个答案:

答案 0 :(得分:0)

我在相关问题上找到了this answer,以便向我提供我需要的内容。

您首先要get a list of tags代表您的回购:

CMFCPropertyGridProperty::CreateInPlaceEdit

然后,对于每个代码,您都会compare the branch with the SHA

lpsz...

如果响应中https://api.github.com/repos/:user/:repo/tags 属性的值为https://api.github.com/repos/:user/:repo/compare/:tagName...:sha_of_commit status,则提交不包含在标记中。如果diverged属性的值为aheadstatus,则提交将包含在标记中。

答案 1 :(得分:0)

与Chad类似的解决方案,但我已经了解到调用标记端点的性能要比比较端点高得多;这是我在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)检索所有标签(由Chad建议):

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

3)循环遍历每个标签,但调用标签api以检索其sha;然后,您可以简单地将其与所需的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
    }

这实现了与比较端点相同的结果,但是没有计算提交差异的冗余工作,这相对更快。