在没有Release的情况下获取仓库的所有tag可以通过以下步骤:
1.使用GitHub GraphQL API中的repository查询来获取仓库的所有标签(tag)和提交(commit)的SHA值,示例查询如下:
query {
repository(owner: "owner_name", name: "repo_name") {
refs(refPrefix: "refs/tags/", first: 100, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) {
edges {
node {
name
target {
... on Commit {
oid
}
}
}
}
}
}
}
在查询中,我们使用了refs来获取仓库中所有的标签,refPrefix参数用于指定查询的前缀为refs/tags/,first参数用于指定最多返回的标签数目,orderBy参数用于指定标签的排序方式,这里我们按标签的提交日期进行降序排序。
2.对查询结果进行处理,提取出所有的标签名称和对应的提交SHA值。
示例代码如下:
import requests
def get_all_tags(owner, repo):
query = """
query {
repository(owner: "%s", name: "%s") {
refs(refPrefix: "refs/tags/", first: 100, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) {
edges {
node {
name
target {
... on Commit {
oid
}
}
}
}
}
}
}
""" % (owner, repo)
response = requests.post('https://api.github.com/graphql', json={'query': query},
headers={'Authorization': 'bearer YOUR_ACCESS_TOKEN'})
data = response.json()
tags = []
for edge in data['data']['repository']['refs']['edges']:
tag_name = edge['node']['name']
commit_sha = edge['node']['target']['oid']
tags.append((tag_name, commit_sha))
return tags
# 示例查询
tags = get_all_tags("owner_name", "repo_name")
print(tags)
以上代码中,我们使用了Python requests库来向GitHub GraphQL API发送查询请求,其中YOUR_ACCESS_TOKEN需要替换成你自己的GitHub Access Token。查询结果中的data字段包含了所有标签的名称和对应的提交SHA值,我们将它们提取出来并以元组的形式存储在tags列表中返回。
注意:如果仓库过多,可能需要使用分页查询来获取所有标签。