是否有一个指向GitHub的链接,用于在最新版本的存储库中下载文件?

Chr*_*eau 122 release github download github-pages

使用GitHub的发布功能,可以提供下载特定版本的已发布软件的链接.但是,每次发布时,都需要更新gh页面.

有没有办法获得任何最新版软件的特定文件的链接?

例如,这将是一个静态链接:

https://github.com/USER/PROJECT/releases/download/v0.0.0/package.zip

我想要的是:

https://github.com/USER/PROJECT/releases/download/latest/package.zip

注意:此问题与GitHub最新版本之间的区别在于此问题 专门要求访问该文件,而不是GitHub最新版本页面

Put*_*tna 58

获取最新版本资产下载链接的Linux解决方案(仅当发布只有一个资产时才有效)

curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d '"' -f 4
Run Code Online (Sandbox Code Playgroud)

  • 管道中的另一个grep将找到适合您的分发和体系结构的文件.对于64位Ubuntu上的[atom](https://github.com/atom/atom)文本编辑器:`curl -s https://api.github.com/repos/atom/atom/releases | grep browser_download_url | grep '64 [.] deb'| 头-n 1 | 切-d'"' - f 4` (7认同)
  • @maikel grepping for browser_download_url仍然适合我. (4认同)
  • 没有browser_download_url了.你现在可以使用tarball_url.`curl -s https://api.github.com/repos/git-ftp/git-ftp/releases | grep tarball_url | 头-n 1 | 切-d'"' - f 4` (3认同)
  • @ya.teck `/latest` 仅列出稳定版本,而不列出草稿或预发布版本:https://developer.github.com/v3/repos/releases/#get-the-latest-release (2认同)

Jae*_*aex 29

您可以使用GitHub Releases API执行ajax请求以获取最新版本下载URL .它还显示它何时发布以及下载次数:

function GetLatestReleaseInfo() {
  $.getJSON("https://api.github.com/repos/ShareX/ShareX/releases/latest").done(function(release) {
    var asset = release.assets[0];
    var downloadCount = 0;
    for (var i = 0; i < release.assets.length; i++) {
      downloadCount += release.assets[i].download_count;
    }
    var oneHour = 60 * 60 * 1000;
    var oneDay = 24 * oneHour;
    var dateDiff = new Date() - new Date(asset.updated_at);
    var timeAgo;
    if (dateDiff < oneDay) {
      timeAgo = (dateDiff / oneHour).toFixed(1) + " hours ago";
    } else {
      timeAgo = (dateDiff / oneDay).toFixed(1) + " days ago";
    }
    var releaseInfo = release.name + " was updated " + timeAgo + " and downloaded " + downloadCount.toLocaleString() + " times.";
    $(".download").attr("href", asset.browser_download_url);
    $(".release-info").text(releaseInfo);
    $(".release-info").fadeIn("slow");
  });
}

GetLatestReleaseInfo();
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="download" href="https://github.com/ShareX/ShareX/releases/latest">Download</a>
<p class="release-info"></p>
Run Code Online (Sandbox Code Playgroud)

为您设置默认按钮URL的版本页面(如重要的是https://github.com/ShareX/ShareX/releases/latest),所以如果浏览器不支持AJAX(或JavaScript),或者是速度太慢,获取URL,下载按钮仍然有效.

当Ajax请求完成时,此按钮的URL将自动更改为直接下载URL.

编辑:

我还制作了一个下载页面,其中显示了多个版本,您可以在此处找到:https://getsharex.com/downloads/

它的源代码:https://github.com/ShareX/sharex.github.io/blob/master/js/downloads.js

  • https://github.com/jquery/jquery/releases他们没有任何版本.它只是版本标签. (2认同)

Ian*_*anB 15

从命令行使用curljq,检索最新版本的第一个文件:

curl -s https://api.github.com/repos/porjo/staticserve/releases/latest | \
  jq --raw-output '.assets[0] | .browser_download_url'
Run Code Online (Sandbox Code Playgroud)

  • `jq --raw-output` 是一种删除引号的更简洁的方法。如果您只想要最新的,则获取“.../releases/latest”并删除“.[0]”会更便宜 | `。但是获取所有版本允许像“jq”这样的查询。[] | .资产[] | .browser_download_url | 选择(结束(“.deb”))'`... (3认同)

小智 14

迟了几年,但我只是实现了一个简单的重定向来支持https://github.com/USER/PROJECT/releases/latest/download/package.zip。那应该重定向到最新的标记package.zip发布资产。希望它很方便!

  • 记录在 https://help.github.com/en/articles/linking-to-releases 上:_如果您想直接链接到最新发布资产的下载,您可以链接到 /owner/name/releases/latest /下载/资产名称.zip_ (10认同)
  • 但是,如果此功能与版本化资产名称一起使用会很有帮助。 (5认同)
  • @Joshua Peek 也许您可以扩展它以将资产名称中的“LATEST”扩展为版本字符串?这对于名称中含有版本号的资产非常有用。 (4认同)
  • 下载最新的源代码怎么样?在这种情况下,资产的名称是什么? (4认同)
  • 我对这个答案很困惑。你在哪里实现这个?你在 Github 工作,就像实现了这个功能一样。或者它是一个在 URL 上可用的 API,但不知何故未链接到? (4认同)
  • 目前 **/releases/latest/download/package.zip** 不再有效。结果没找到。示例:https://github.com/FortAwesome/Font-Awesome/releases/latest/download/package.zip (3认同)
  • 评论中说这不起作用的人可能会感到困惑,因为这个答案只是给出了从发行版下载名为“package.zip”的文件的示例。如果您的资产名为“foo.zip”,您需要将其更改为“foo.zip”。如果您的资产名为“foo-1.2.3.zip”,其中 1.2.3 是发行版本,则您必须使用不同的方法。 (3认同)
  • 注意,顺序切换为“ ... / releases / latest / download / ...”与“ ... / releases / download / v0.0.0 / ...”。您不能简单地将“ v0.0.0”替换为“ latest”。 (2认同)

小智 9

Github 现在支持从最新版本下载单个文件的静态链接:https://help.github.com/en/articles/linking-to-releases

https://github.com/USER/PROJECT/releases/latest/download/package.zip
Run Code Online (Sandbox Code Playgroud)


slm*_*slm 9

这可以通过一行代码完成,如下所示:

$ curl -s https://api.github.com/repos/slmingol/gorelease_ex/releases/latest \
    | grep -wo "https.*Linux.*gz" | wget -qi -
Run Code Online (Sandbox Code Playgroud)

我们在这里:

  • 拉取 GitHub 的 API 端以获取有关带有标签的发布工件的信息latest
  • 解析该输出,查找与模式匹配的工件https.*Linux.*gz
  • 将 URL 传递给命令wget -qi -以便下载

为了进一步揭示这里发生的事情,我们使用更广泛grep的 API 端点:

$ curl -s https://api.github.com/repos/slmingol/gorelease_ex/releases/latest | grep -wo "https.*" | grep gz
https://github.com/slmingol/gorelease_ex/releases/download/0.0.78/gorelease_ex_0.0.78_Darwin_x86_64.tar.gz"
https://github.com/slmingol/gorelease_ex/releases/download/0.0.78/gorelease_ex_0.0.78_Linux_x86_64.tar.gz"
Run Code Online (Sandbox Code Playgroud)

在上面您可以看到匹配的 URL。

进一步提示

您还可以参数化该grep参数,以便它“动态”确定它在哪个平台上运行,并根据该平台替换为适当的字符串。

$ curl -s https://api.github.com/repos/slmingol/gorelease_ex/releases/latest \
    | grep -wo "https.*$(uname).*gz" | wget -qi -
Run Code Online (Sandbox Code Playgroud)

这里$(uname)将返回 Darwin、Linux 等。


Gre*_*ray 8

另一个使用curl和wget从最新版本页面下载单个二进制文件的Linux解决方案

curl -s -L https://github.com/bosun-monitor/bosun/releases/latest | egrep -o '/bosun-monitor/bosun/releases/download/[0-9]*/scollector-linux-armv6' | wget --base=http://github.com/ -i - -O scollector
Run Code Online (Sandbox Code Playgroud)

说明:

curl -s -L 是静默下载最新版本的HTML(在重定向之后)

egrep -o '...' 使用正则表达式查找所需的文件

wget --base=http://github.com/ -i - 将管道的相对路径转换为绝对URL

-O scollector设置所需的文件名.

-N如果文件较新但S3发出403 Forbidden错误,则可能只能添加下载.

  • 我的目标是在网站上建立一个始终指向最新版本的链接.linux命令不允许这样做. (3认同)

Mik*_*e D 7

如前所述,jq对于此API和其他REST API非常有用.

tl; dr - 更多详情如下

假设你想要macOS发布:

URL=$( curl -s "https://api.github.com/repos/atom/atom/releases/latest" \
   | jq -r '.assets[] | select(.name=="atom-mac.zip") | .browser_download_url' )
curl -LO "$URL"
Run Code Online (Sandbox Code Playgroud)

原子释放的解决方案

注意每个repo可以有不同的方式来提供所需的工件,所以我将演示一个表现良好的原子.

获取已发布资产的名称

curl -s "https://api.github.com/repos/atom/atom/releases/latest" \
    | jq -r '.assets[] | .name'

atom-1.15.0-delta.nupkg
atom-1.15.0-full.nupkg
atom-amd64.deb
...
Run Code Online (Sandbox Code Playgroud)

获取所需资产的下载URL

atom-mac下面是我通过jq获得的资产select(.name=="atom-mac.zip")

curl -s "https://api.github.com/repos/atom/atom/releases/latest" \
    | jq -r '.assets[] | select(.name=="atom-mac.zip") | .browser_download_url'

https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip
Run Code Online (Sandbox Code Playgroud)

下载工件

curl -LO "https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip"
Run Code Online (Sandbox Code Playgroud)

jq游乐场

jq语法可能很难.这是一个试验jq上述内容的游乐场:https: //jqplay.org/s/h6_LfoEHLZ

安全

如果可能的话,您应该采取措施通过sha256sum和gpg确保下载的工件的有效性.


Rol*_*olf 7

使用(内部)wget获取HTML内容的解决方案,为zip文件(使用egrep)过滤它,然后下载zip文件(使用外部wget).

wget https://github.com/$(wget https://github.com/<USER>/<PROJECT>/releases/latest -O - | egrep '/.*/.*/.*zip' -o)
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 5

链接到发布帮助页确实提到了“最新版本”按钮,但是,这并不让你一个下载链接。

https://github.com/reactiveui/ReactiveUI/releases/latest

为此,您需要先获取最新的标签(如“下载文件最新版本的 GitHub URL ? ”中所述):

latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)

curl -L https://github.com/reactiveui/ReactiveUI/releases/download/$latestTag/ReactiveUI-$latestTag.zip
Run Code Online (Sandbox Code Playgroud)

  • 这仍然需要在每次发布新版本时推送新版本的 `gh-pages` 分支;目标是有一个静态链接,我可以用来“参考最新版本”。现在我最好的选择是参考发布页面。 (2认同)

Lah*_*zar 5

只需使用以下网址之一即可下载最新版本:(例如,从boxbilling项目中获取网址):https ://api.github.com/repos/boxbilling/boxbilling/releases

以zip格式下载最新版本:https//api.github.com/repos/boxbilling/boxbilling/zipball

以tarball下载最新版本:https//api.github.com/repos/boxbilling/boxbilling/tarball

单击其中一个URL立即下载最新版本。当我编写此行时,当前为:boxbilling-boxbilling-4.20-30-g452ad1c [.zip / .tar.gz]

更新:在我的日志文件中找到另一个URL(请参见上面的示例) https://codeload.github.com/boxbilling/boxbilling/legacy.tar.gz/master

  • 那些不是回购版本 (4认同)

Cir*_*四事件 5

截至2018年5月23日,根据GitHub支持,这是不可能的

2018年6月23日联系support@github.com,并显示以下消息:

您能确定目前除了弄乱API之外没有其他方法吗?

他们回答:

感谢您与我们联系。我们建议使用API​​来获取最新版本,因为该方法稳定,有据可查,并且不会在短期内发生变化:

https://developer.github.com/v3/repos/releases/#get-the-latest-release

我还将在以下位置进行跟踪:https : //github.com/isaacs/github/issues/658

没有任何依赖关系的Python解决方案

坚固耐用:

#!/usr/bin/env python3

import json
import urllib.request

_json = json.loads(urllib.request.urlopen(urllib.request.Request(
    'https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases/latest',
     headers={'Accept': 'application/vnd.github.v3+json'},
)).read())
asset = _json['assets'][0]
urllib.request.urlretrieve(asset['browser_download_url'], asset['name'])
Run Code Online (Sandbox Code Playgroud)

也可以看看:

还考虑预发行

/latest没有看到预发布版本,但是由于首先/releases显示了最新版本,因此很容易做到:

#!/usr/bin/env python3

import json
import urllib.request

_json = json.loads(urllib.request.urlopen(urllib.request.Request(
    'https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases',
     headers={'Accept': 'application/vnd.github.v3+json'},
)).read())
asset = _json[0]['assets'][0]
urllib.request.urlretrieve(asset['browser_download_url'], asset['name'])
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

47135 次

最近记录:

6 年,5 月 前