2

Github のtag メソッドは、リポジトリにプッシュされたすべてのタグのリストを返し、最新のタグが一番上に表示されます。呼び出しの例: https://api.github.com/repos/ff0000/rosy/tagsは、次の json オブジェクトを生成します。

[{
    name: "rbp-folder-rename",
    zipball_url: "https://api.github.com/repos/ff0000/rosy/zipball/rbp-folder-rename",
    tarball_url: "https://api.github.com/repos/ff0000/rosy/tarball/rbp-folder-rename",
    commit: {
        sha: "09ebda2678d932a005fc86ab78f6c04eebdcd50d",
        url: "https://api.github.com/repos/ff0000/rosy/commits/09ebda2678d932a005fc86ab78f6c04eebdcd50d"
    }
},
{
    name: "2.0.10",
    zipball_url: "https://api.github.com/repos/ff0000/rosy/zipball/2.0.10",
    tarball_url: "https://api.github.com/repos/ff0000/rosy/tarball/2.0.10",
    commit: {
        sha: "fe284c7d461107d9d08d2d4dcb676759f9485fc1",
        url: "https://api.github.com/repos/ff0000/rosy/commits/fe284c7d461107d9d08d2d4dcb676759f9485fc1"
    }
},

// ....

{
    name: "2.1.5",
    zipball_url: "https://api.github.com/repos/ff0000/rosy/zipball/2.1.5",
    tarball_url: "https://api.github.com/repos/ff0000/rosy/tarball/2.1.5",
    commit: {
        sha: "db92baa49657b3c3d27b1475c415c19525cb2118",
        url: "https://api.github.com/repos/ff0000/rosy/commits/db92baa49657b3c3d27b1475c415c19525cb2118"
    }
}]

質問

  1. このリストでは、最新のタグが一番上にあり、その後に以前のタグの履歴が新しい順にリストされているようです。なんで?最初の結果が残りの結果とは異なる順序になっているのは奇妙に思えますが、これは間違って読んでいるのでしょうか?
  2. masterブランチのみに適用された最新バージョンをプログラムで取得する方法はありますか? リポジトリの最新の安定バージョンをプログラムで取得したいと考えています。

どんな助け/洞察もいただければ幸いです。

4

3 に答える 3

1

このリストでは、最新のタグが一番上にあり、その後に以前のタグの履歴が新しい順にリストされているようです。

GitHub API がタグを返す順序に依存するべきではありません。タイムスタンプがなく、リポジトリの寄稿者が一貫性のないタグ名 (v1.9.0および など) を使用している可能性があるため2.5.14です。その特定の例では、v1.9.0最初に表示されます-このレポを参照してください。

一貫したタグ ( example ) を使用するようメンテナーをバグらせ、とにかくsemverルールに従って GitHub の出力をソートする必要があります。これらのルールは自明ではないため (そのリンクのポイント 11 を参照)、semver ライブラリー(ブラウザー用に移植された) を使用することをお勧めします。

var gitHubPath = 'ff0000/rosy';  // your 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>

最新の「安定版」リリースを入手する

GitHub リリースには、prereleasetrue または false のフラグがあります。「安定版」を と定義するとprerelease: false、リリースを取得し、フィルタリングしprerelease: falseて並べ替えることができます。

var gitHubPath = 'idorecall/selection-menu';  // your example repo doesn't have releases
var url = 'https://api.github.com/repos/' + gitHubPath + '/releases';

$.get(url).done(function (data) {
  var releases = data.filter(function (release) {
    return !release.prerelease;
  })
  releases = releases.sort(function (v1, v2) {
    return Date.parse(v2.published_at) - Date.parse(v1.published_at);
  });
  console.log(releases[0]);
  $('#result').html(releases[0].name);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Latest release name: <span id="result"></span></p>

于 2015-09-02T00:11:02.300 に答える
0

タグをブランチ名に置き換えるだけです。

https://api.github.com/repos/ff0000/rosy/zipball/master

そのクエリのより一般的な形式 (特定のブランチの場合) を参照してください

しかし、それはリポジトリの最新の安定したバージョンが入っていることを前提としていmasterます (それは最新の「開発」である可能性があり、コンパイルして基本的な単体テストに合格するという事実を過ぎて非常に安定していない可能性があります): 各プロジェクトには独自の規則があります。

価値があるのはhttps://api.github.com/repos/ff0000/rosy/branches、同じレポのブランチをリストすることです。

于 2013-02-14T06:41:18.440 に答える