有没有一个链接到GitHub下载最新版本的存储库中的文件?

使用GitHub的发布function ,可以提供一个链接来下载已发布软件的特定版本。 但是,每次发布,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最新版本页面

您可以使用GitHub Releases API来执行ajax请求以获取最新版本的下载URL,如下所示:

 <script type="text/javascript"> $(document).ready(function () { GetLatestReleaseInfo(); }); 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."; $(".sharex-download").attr("href", asset.browser_download_url); $(".release-info").text(releaseInfo); $(".release-info").fadeIn("slow"); }); } </script> 

它还显示了它何时发布以及下载计数是什么:

在这里输入图像说明

jQuery需要这个工作。

另外重要的是你要设置最新版本的URL来下载button,如下所示: https : //github.com/ShareX/ShareX/releases/latest

所以,如果浏览器不支持Ajax(或JavaScript),或者得到的URL太慢,下载button仍然可以工作。

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

编辑:

我也做了下载页面,显示多个版本,你可以在这里find: https : //getsharex.com/downloads/

你可以做View page source来检查它是如何工作的。 但你也可以从这里看到: https : //github.com/ShareX/sharex.github.io/blob/master/downloads/index.html

Linux解决scheme获取最新版本资产下载链接(仅在版本只有一个资产时才有效)

 curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d '"' -f 4 

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

 curl -s https://api.github.com/repos/porjo/staticserve/releases/latest | \ jq --raw-output '.assets[0] | .browser_download_url' 

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

 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 

说明:

curl -s -L是静静地下载最新版本的HTML(在redirect之后)

egrep -o '...'使用正则expression式来find你想要的文件

wget --base=http://github.com/ -i -将pipe道中的相对path转换为绝对URL

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

可能能够添加-N只能下载,如果文件是新的,但S3是给出了一个403 Forbidden错误。

只需使用下面的一个url下载最新版本:(例如从boxbilling项目的url): https ://api.github.com/repos/boxbilling/boxbilling/releases

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

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

点击其中一个url即可下载最新版本。 正如我写下这行:目前是: boxbilling-boxbilling-4.20-30-g452ad1c [.zip / .tar.gz]

更新:在我的日志文件(参考上面的例子)中find其他的URL https://codeload.github.com/boxbilling/boxbilling/legacy.tar.gz/master

如前所述, jq对于这个和其他REST API非常有用。

tl;博士 – 更多细节如下

假设你想要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" 

primefaces释放解决scheme

请注意,每个回购可以有不同的方式提供所需的工件,所以我会演示一个像primefaces一样的行为良好的。

获取已发布资产的名称

 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 ... 

获取所需资产的下载url

primefacesmac下面是我想要的资产通过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 

下载工件

 curl -LO "https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip" 

jq游乐场

jq语法可能很难。 这里有一个实验上面的jq的操场: https : jq

安全

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

链接到发布帮助页面确实提到了“最新版本”button,但是这并没有给你一个下载链接。

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 

在PHP中 – redirect到最新版本的下载。 简单地把你的网站空间

 <?php /** * Download latest release from github release articats * License: Public Domain */ define('REPO', 'imi-digital/iRobo'); $opts = [ 'http' => [ 'method' => 'GET', 'header' => [ 'User-Agent: PHP' ] ] ]; $context = stream_context_create($opts); $releases = file_get_contents('https://api.github.com/repos/' . REPO . '/releases', false, $context); $releases = json_decode($releases); $url = $releases[0]->assets[0]->browser_download_url; header('Location: ' . $url); 

我想从版本库描述中的README.md文件下载版本。 在那里,我不能执行JavaScript。

我可以添加这样的链接到我的所有仓库的自述文件或github页面:

 https://niccokunzmann.github.io/download_latest/test.txt 

这是有效的,因为JavaScript引用者被设置,并且下载的存储库通过document.referrer来确定。 因此,这个链接也适用于叉子。

你可以在这里find源代码,或者使用我的回购。

使用(内部)wget获取HTML内容的解决scheme,使用egrep对zip文件进行过滤,然后下载zip文件(使用外部wget)。

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

如果您只想使用curl ,则可以使用-w '%{url_effective}'来尝试打印redirect链之后的URL(如果使用-L调用,则使用curl)。 所以,例如

 curl -sLo /dev/null -w '%{url_effective}' https://github.com/github-tools/github/releases/latest 

输出https://github.com/github-tools/github/releases/tag/v3.1.0

如果回购只使用标签而不是发布 – 比较。 jQuery – 基于一个URL的解决scheme不起作用。

相反,您必须查询所有标记,对它们进行sorting并构build下载URL。 我为Go语言和jQuery回购实现了这样的解决scheme: 链接到Github 。

也许,这有助于某人。