首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GitHub API (v3):按创建日期排序标记

GitHub API (v3):按创建日期排序标记
EN

Stack Overflow用户
提问于 2013-10-18 14:31:36
回答 4查看 5.6K关注 0票数 16

我在使用GitHub API时遇到了一个问题/问题。

我需要一个单标签后创建的所有标签的列表。要做到这一点,唯一的方法是按日期比较标记。但是,API的结果并没有按日期排序:

API (rails存储库示例)的结果:

网络接口的结果:

我所期望的是一份按日期订购的清单。但是,如图所示: API在v4.0.0发布之前返回v4.0.0rc1 & v4.0.0rc2,而4.0.0则在发布候选版本之后发布。服务器端甚至没有创建/提交订单的日期。

发布API也不是一个解决方案。这个API只返回由Github创建的版本,而不是由标记创建的版本。

有没有办法按日期订购这些标签?

提前感谢!

鲁本

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-27 06:18:45

存储库API当前按照"git标记“命令返回标签的顺序返回标记,这意味着它们是按字母顺序排序的。

在Git中按时间顺序排序标记的问题是,有两种类型的标记,即轻量级标记和注释标记),对于轻量级类型,Git不存储创建日期。

Releases/Tags当前按标签指向的提交日期按时间顺序对标记进行排序。这也不是标记本身创建的日期,但它确实建立了事物的时间顺序。

将此可选排序选项添加到API中将出现在我们的特性请求列表中。

票数 12
EN

Stack Overflow用户

发布于 2017-11-26 23:03:55

使用GraphQL API v4,我们现在可以通过field: TAG_COMMIT_DATEorderBy中的提交日期来过滤标签。以下将按提交日期执行升序标记:

代码语言:javascript
运行
复制
{
  repository(owner: "rails", name: "rails") {
    refs(refPrefix: "refs/tags/", last: 100, orderBy: {field: TAG_COMMIT_DATE, direction: ASC}) {
      edges {
        node {
          name
          target {
            oid
            ... on Tag {
              message
              commitUrl
              tagger {
                name
                email
                date
              }
            }
          }
        }
      }
    }
  }
}

在浏览器中测试它

在这里,tagger字段在target中只对带注释的标记进行填充&对于轻量级标记是空的。

由于date属性在tagger中给出标记的创建日期(仅用于带注释的标记),因此可以轻松地在客户端按创建日期进行筛选(而不必检索所有标记1×1)。

注意,此时orderBy.field的可用选项是TAG_COMMIT_DATE & ALPHABETICAL (无TAG_CREATION_DATE)。

票数 8
EN

Stack Overflow用户

发布于 2015-12-12 00:50:25

编辑:现在可以使用GitHub GraphQL API了。

作为解决办法,这里有一个节点模块,它基本上获取每个标记的提交细节:github-api-标签-完整

代码语言:javascript
运行
复制
> npm install github-api-tags-full github moment

var GitHubApi  = require('github'),
moment     = require('moment'),
githubTags = require('github-api-tags-full');

var github = new GitHubApi({
  version: '3.0.0'
});

githubTags({ user: 'golang', repo: 'go' }, github)
.then(function(tags) {
  var tagsSorted = tags.sort(byAuthorDateAsc).reverse(); // descending
  console.log(tagsSorted); // prints the array of tags sorted by their creation date
});

var byAuthorDateAsc = function(tagA, tagB) {
  return githubCompareDates(
    tagA.commit.author.date,
    tagB.commit.author.date
  );
};
var githubCompareDates = function(dateStrA, dateStrB) {
  return moment(dateStrA).diff(dateStrB);
};

致以最诚意的问候

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19452244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档