Github的tag method返回推送到您的仓库的所有标签的列表,顶部列出了最新的标签。这是一个示例调用: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"
}
}]
master
分支的最新版本?我想以编程方式检索最新的稳定版repo。任何帮助/见解都将不胜感激。
答案 0 :(得分:1)
此列表顶部显示最新标记,后面是反向时间顺序列出的以前标记的历史记录。
您不应该依赖于GitHub API返回标记的顺序,因为没有时间戳,并且repo贡献者可能使用了不一致的标记名称,例如v1.9.0
和2.5.14
。在该特定示例中,v1.9.0
将首先显示 - 请参阅this repo。
你应该让维护者错误地使用一致的标签(example),并根据semver规则对GitHub的输出进行排序。由于这些规则非常重要(请参阅该链接的第11点),最好使用the semver library(ported for the browser)。
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版本有一个prerelease
标志,可以是true或false。如果您将“stable”定义为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>
答案 1 :(得分:1)
要获取最新版本号:
https://api.github.com/repos/user/repo/releases/latest
示例,对于此存储库(https://github.com/pyIDM/PyIDM),您可以在以下网址中使用:
https://api.github.com/repos/pyidm/pyidm/releases/latest
您将获得一个具有tag_name =最新版本的json文件
答案 2 :(得分:0)
您只需使用分支名称替换标记:
https://api.github.com/repos/ff0000/rosy/zipball/master
在“Is there anyway to programmatically fetch a zipball of private github repo?”中查看该查询的更一般形式(对于给定分支)。
但是假设repo的最新稳定版本在master
中(它可能是最新的'开发',在编译并通过基本单元测试之后可能不是很稳定):每个项目都有自己的约定。
对于它的价值,https://api.github.com/repos/ff0000/rosy/branches
将列出同一个回购的分支。