我正在尝试识别包含特定提交的所有标记。使用git命令工具,可以通过以下方式完成:
git tag --contains <commit>
但是,我需要为几个存储库执行此操作,因此我期待依赖REST API。有没有办法通过GitHub的REST API收集相同的信息?
答案 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
属性的值为ahead
或status
,则提交将包含在标记中。
答案 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
}
这实现了与比较端点相同的结果,但是没有计算提交差异的冗余工作,这相对更快。