如何从给定存储库的github API获取最新的标记值

时间:2014-11-20 23:59:07

标签: json git github

我可以使用以下命令从GitHub api获取最新的提交:

$ curl 'https://api.github.com/repos/dwkns/test/commits?per_page=1'

但是,生成的JSON不包含对我在提交时创建的标记的任何引用。

我可以使用以下方式获取标签列表:

$ curl 'https://api.github.com/repos/dwkns/test/tags'

然而,生成的JSON,虽然它包含我想要的标签的名称,但不是按照它们的创建顺序 - 没有办法告诉哪个标签是最新的。

编辑:创建的最新代码为LatestLatestLatest

我的问题是我需要做什么API调用来获取我的存储库中最新标记的名称?

3 个答案:

答案 0 :(得分:0)

#!/bin/sh
curl -s https://github.com/dwkns/test/tags |
awk '/tag-name/{print $3;exit}' FS='[<>]'

或者

#!/bin/awk -f    
BEGIN {
  FS = "[<>]"
  while ("curl -s https://github.com/dwkns/test/tags" | getline) {
    if(/tag-name/){print $3;exit}
  }
}

答案 1 :(得分:0)

jqcurl结合使用,您可以获得非常简单的命令:

curl -s \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/dwkns/test/tags \
  | jq -r '.[0].name' 

输出(截至今天):

v56

jq命令的解释:

  • -r用于&#34; raw&#34;,避免在jq&#39输出上引用json
  • .[0]选择我们从github获得的json object中的第一个(最新)标记array
  • .name选择此最新json name
  • 中的object属性

答案 2 :(得分:0)

以下内容对我有用,但是您可能需要修改grep,具体取决于标签的命名约定:

curl -s 'https://github.com/username/reponame/tags/'|grep -o "$Version v[0-9].[0-9][0-9]"|sort -r|head -n1

在设计升级脚本时,可用于测试Github上发布的回购的最新版本与已安装的软件版本(这就是为什么我需要此;->)

注意:reponame是名称{strong>排除 .git。因此,如果您要从克隆地址中剪切URL,请在构建上述URL-HTH-Terrence Houlahan

时将.git位从末尾截断