如何获取与标签的实际代码相关联的SHA?

时间:2015-03-22 20:26:49

标签: github github-api

我想获得与标签相关的实际代码的SHA。这可能吗? API中似乎可以使用的是用于创建标记的SHA,这对我的目的来说没那么有用。

如果我访问

https://github.com/:owner/:repo/releases/tag/:tag
https://github.com/ramda/ramda/releases/tag/v0.12.0

我可以在.tag-references li:eq(1) a中找到用于构建标记的最新提交的链接。 (或者我认为它就是它。)它的形式是

https://github.com/:owner/:repo/commit/:sha
https://github.com/ramda/ramda/commit/e2fad9bc6dd425a00dd98d2fb7ab1a9c52fce074

可以提取此SHA并使用它来构建从我的文档到源文件的链接(这就是它的全部内容。)但这涉及到屏幕抓取。我更喜欢使用API​​。

但据我所知,API通过以下调用为我提供了一个标记列表:

https://api.github.com/repos/:owner/:repo/git/refs/tags
https://api.github.com/repos/ramda/ramda/git/refs/tags

包括这样的条目:

{
  "ref": "refs/tags/v0.12.0",
  "url": "https://api.github.com/repos/ramda/ramda/git/refs/tags/v0.12.0",
  "object": {
    "sha": "c71639093b1a433fa68d4df2056be32a635a56d5",
    "type": "tag",
    "url": "https://api.github.com/repos/ramda/ramda/git/tags/c71639093b1a433fa68d4df2056be32a635a56d5"
  }
}

虽然解析响应以找到正确的条目没有问题,但是生成的SHA似乎与我想要引用的代码无关。

有没有办法通过API找到标签页面上显示的SHA?

1 个答案:

答案 0 :(得分:2)

如果转到标记对象的URL(https://api.github.com/repos/ramda/ramda/git/tags/c71639093b1a433fa68d4df2056be32a635a56d5),则包含在标记引用的json响应中,您会得到:

{
  "sha": "c71639093b1a433fa68d4df2056be32a635a56d5",
  "url": "https://api.github.com/repos/ramda/ramda/git/tags/c71639093b1a433fa68d4df2056be32a635a56d5",
  "tagger": {
    "name": "buzzdecafe",
    "email": "m_hur@yahoo.com",
    "date": "2015-03-21T22:25:46Z"
  },
  "object": {
    "sha": "e2fad9bc6dd425a00dd98d2fb7ab1a9c52fce074",
    "type": "commit",
    "url": "https://api.github.com/repos/ramda/ramda/git/commits/e2fad9bc6dd425a00dd98d2fb7ab1a9c52fce074"
  },
  "tag": "v0.12.0",
  "message": "Version 0.12.0\n"
}

其中您要查找的提交对象的SHA1(e2fad9bc6dd425a00dd98d2fb7ab1a9c52fce074)为object.sha

Git实际上有两种标签:轻量级标签和带注释的标签。轻量级只是引用直接指向提交sha的引用。带注释的标签实际上是一个具有自己的sha的对象,它有一个指向提交sha的指针。这是第二种标签的一个例子。 (有关详细信息,请参阅man git-tag