15

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

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

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

API 结果

网络界面的结果:

网页界面结果

我所期望的是按日期排序的列表。但是,正如您在图片中看到的:API 在 v4.0.0 发布之前返回 v4.0.0rc1 和 v4.0.0rc2,而 4.0.0 在候选发布之后发布。在服务器端甚至没有要订购的创建/提交日期。

发布 API 也不是解决方案。此 API 仅返回 Github 创建的版本,而不是标签创建的版本。

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

提前致谢!

鲁本

4

3 回答 3

13

Repositories API当前按照“git tag”命令返回的顺序返回标签,这意味着它们是按字母顺序排序的。

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

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

向 API 添加此替代排序选项位于我们的功能请求列表中。

于 2013-10-27T06:18:45.397 回答
8

使用GraphQL API v4,我们现在可以使用field: TAG_COMMIT_DATEinside按提交日期过滤标签orderBy。以下将按提交日期执行升序排序的标签:

{
  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只会为带注释的标签填写,而对于轻量级标签,将为空。

由于datein 属性tagger给出了标签的创建日期(仅适用于带注释的标签),因此可以轻松地在客户端按创建日期进行过滤(无需一一检索所有标签)

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

于 2017-11-26T23:03:55.760 回答
4

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

作为解决方法,有一个节点模块,它基本上获取每个标签的提交详细信息: github-api-tags-full

> 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);
};

最诚挚的问候

于 2015-12-12T00:50:25.017 回答