有没有办法使用github API v3获取给定repo的最新标记

时间:2015-03-17 21:06:28

标签: git github-api

我对github api比较陌生,我正在努力获得给定回购的最新标签。

问: 为什么我需要它?

A: 作为QA,我负责测试并发布到LIVE,我们的团队拥有大约40件文物(github中的回购)。我想构建一个工具,列出在最新标记之后提交的项目。这样我就可以更有效地管理版本。

说到点。

根据Github api获取回购的所有标签

GET /repos/:owner/:repo/tags

但是这给出了repo具有的完整标签列表。

有没有一种简单的方法可以找到最新的标签,而无需迭代上述api调用中的所有可用标签?

如果我遍历每个标签以便找到最新的标签(基于每个标签的时间戳),那么随着时间的推移,这显然不是有效的方式,标签的数量会增加,因为我想要重复相同的过程至少10个以上的回购。

任何帮助都将受到高度赞赏。

非常感谢提前

4 个答案:

答案 0 :(得分:10)

GitHub没有用于检索最新代码的API,就像retrieving the latest release一样。这可能是因为标签可能是任意字符串,不一定是semvers,但它并不是一个借口,因为标签有时间戳,而GitHub在通过Tags API返回时按字典顺序对标签进行排序。

无论如何,要获取最新标记,您需要调用该API,然后根据semver规则对标记进行排序。由于这些规则非常重要(请参阅该链接的第11点),最好使用the semver libraryported for the browser)。

var gitHubPath = 'iDoRecall/selection-menu';  // example repo
var url = 'https://api.github.com/repos/' + gitHubPath + '/tags';

$.get(url).done(function (data) {
  var versions = data.sort(function (v1, v2) {
    return semver.compare(v2.name, v1.name)
  });
  $('#result').html(versions[0].name);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/hippich/bower-semver/master/semver.min.js"></script>
<p>Latest tag: <span id="result"></span></p>

答案 1 :(得分:4)

作为GitHub API的替代方案,您可以考虑在&#34; Is there a simple way to “git describe” a remote repository?&#34;中提到的简单脚本。 (sourcesvnpenn):

#!/usr/bin/awk -f
BEGIN {
  if (ARGC != 2) {
    print "git-describe-remote.awk https://github.com/stedolan/jq"
    exit
  }
  FS = "[ /^]+"
  while ("git ls-remote " ARGV[1] "| sort -Vk2" | getline) {
    if (!sha)
      sha = substr($0, 1, 7)
    tag = $3
  }
  while ("curl -s " ARGV[1] "/releases/tag/" tag | getline)
    if ($3 ~ "commits")
      com = $2
  printf com ? "%s-%s-g%s\n" : "%s\n", tag, com, sha
}

确实可以提取标签(以及更多),而无需克隆存储库。

注意:commented belowJoels Elf,请确保/usr/bin/awk引用gawk,而不是mawk

答案 2 :(得分:4)

您可以在https://api.github.com/repos/$org/$repo/releases/latest

获取最新版本

如果您只想要标记名称,可以尝试以下方法:

curl https://api.github.com/repos/$org/$repo/releases/latest -s | jq .name -r

答案 3 :(得分:1)

我发现的最简单的(对于我没有“最新”并且我不想结帐分支的情况很有用)是:

curl  "https://api.github.com/repos/certbot/certbot/tags" | jq -r '.[0].name'

这只是从(例如)相应的 certbot 标签页面(在 https://github.com/certbot/certbot/tags)打印“最高”标签编号

感谢https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c#gistcomment-2649739