มีลิงก์ไปยัง GitHub สำหรับดาวน์โหลดไฟล์ในที่เก็บรุ่นล่าสุดหรือไม่


144

การใช้คุณลักษณะการเผยแพร่ของ GitHubทำให้สามารถให้ลิงก์สำหรับดาวน์โหลดซอฟต์แวร์ที่เผยแพร่ในเวอร์ชันเฉพาะได้ อย่างไรก็ตามทุกครั้งที่มีการเผยแพร่ gh-page จะต้องได้รับการอัปเดตด้วย

มีวิธีรับลิงค์ไปยังไฟล์เฉพาะของซอฟต์แวร์เวอร์ชันล่าสุดหรือไม่?

เช่นนี่จะเป็นลิงก์แบบคงที่:

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

สิ่งที่ฉันต้องการคือ:

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

หมายเหตุ: ความแตกต่างระหว่างคำถามนี้กับ GitHub รุ่นล่าสุดคือคำถามนี้ถามถึงการเข้าถึงไฟล์โดยเฉพาะไม่ใช่หน้ารุ่นล่าสุดของ GitHub


1
สิ่งนี้ได้รับการสนับสนุนโดย Github ในขณะนี้ (โดยมีความแตกต่างเล็กน้อยในรูปแบบ URL) ดูstackoverflow.com/questions/24987542/…
wisbucky

คำตอบ:


48

ไม่กี่ปีที่ปลาย https://github.com/USER/PROJECT/releases/latest/download/package.zipแต่ฉันเพียงแค่ดำเนินการเปลี่ยนเส้นทางที่ง่ายในการสนับสนุน สิ่งนี้ควรเปลี่ยนเส้นทางไปยังpackage.zipเนื้อหาการเผยแพร่ที่ติดแท็กล่าสุด หวังว่าจะเป็นประโยชน์!


3
เอกสารในhelp.github.com/en/articles/linking-to-releases : หากคุณต้องการเชื่อมโยงโดยตรงกับการดาวน์โหลดเนื้อหารุ่นล่าสุดของคุณคุณสามารถเชื่อมโยงไปยัง / owner / name / release / latest / download / -name.zip
Liam

4
อย่างไรก็ตามจะมีประโยชน์หากคุณลักษณะนี้ทำงานร่วมกับชื่อเนื้อหาที่เป็นเวอร์ชัน
Liam

3
โปรดทราบว่าเพื่อที่จะเปลี่ยนVS.../releases/latest/download/... .../releases/download/v0.0.0/...คุณไม่สามารถแทนที่v0.0.0ด้วยlatestในสถานที่
wisbucky

2
@Joshua Peek บางทีคุณอาจขยายสิ่งนี้เพื่อขยาย "ล่าสุด" ในชื่อเนื้อหาให้เป็นสตริงเวอร์ชันได้หรือไม่ ซึ่งจะทำให้มีประโยชน์สำหรับเนื้อหาที่มีหมายเลขเวอร์ชันอยู่ในชื่อ
jwatt

1
แล้วการดาวน์โหลดซอร์สโค้ดล่าสุดล่ะ? ชื่อของสินทรัพย์ในกรณีนั้นคืออะไร?
skd

60

โซลูชัน Linux เพื่อรับลิงค์ดาวน์โหลดเนื้อหารีลีสล่าสุด (ใช้งานได้เฉพาะเมื่อรีลีสมีเนื้อหาเดียวเท่านั้น)

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

7
grep เพิ่มเติมอีกหนึ่งรายการในไปป์ไลน์จะค้นหาไฟล์สำหรับการแจกจ่ายและสถาปัตยกรรมของคุณ สำหรับโปรแกรมแก้ไขข้อความatomบน Ubuntu 64 บิต:curl -s https://api.github.com/repos/atom/atom/releases | grep browser_download_url | grep '64[.]deb' | head -n 1 | cut -d '"' -f 4
hobs

3
ไม่มี browser_download_url อีกต่อไป คุณสามารถใช้ tarball_url ได้แล้ว curl -s https://api.github.com/repos/git-ftp/git-ftp/releases | grep tarball_url | head -n 1 | cut -d '"' -f 4
maikel

4
@maikel grepping สำหรับ browser_download_url ยังคงใช้งานได้สำหรับฉัน
Léo Lam

@ léo-lam คุณพูดถูก หากคุณไม่มีเนื้อหาคุณสามารถใช้ tarball_url เพื่อรับซอร์สโค้ดได้
maikel

คุณสามารถโหลดเฉพาะรุ่นล่าสุดเพื่อหลีกเลี่ยง | head -n 1 api.github.com/repos/boxbilling/boxbilling/releases/latest
ya.teck

29

คุณสามารถทำอาแจ็กซ์คำขอเพื่อรับ URL ปล่อยดาวน์โหลดล่าสุดใช้GitHub ข่าว API นอกจากนี้ยังแสดงเมื่อเปิดตัวและจำนวนการดาวน์โหลด:

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

เป็นสิ่งสำคัญสำหรับคุณในการตั้งค่า 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


เย็น. คุณรู้หรือไม่ว่าเหตุใดจึงอาจใช้งานไม่ได้ curl -s https://api.github.com/repos/DataTables/DataTables/releases/latest
Volte

เพราะคุณไม่มีวันปล่อย. ตรวจสอบ: api.github.com/repos/DataTables/DataTables/releases
Jaex

ฟังกี้ ... github.com/DataTables/DataTables/releasesแสดงการเผยแพร่มากมาย ต้องมีความคลุมเครืออยู่ที่นั่น
Volte

ไม่นี่เป็นเพียงแท็กเท่านั้น ไม่มีการเผยแพร่
MrD

2
github.com/jquery/jquery/releasesพวกเขาไม่มีการเผยแพร่ใด ๆ เป็นเพียงแท็กเวอร์ชัน
Jaex

15

จากบรรทัดคำสั่งโดยใช้curlและjqดึงไฟล์แรกของรีลีสล่าสุด :

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

1
jq --raw-outputเป็นวิธีที่สะอาดกว่าในการวางคำพูด หากคุณต้องการเพียงข้อมูลล่าสุดการดึงข้อมูล.../releases/latestและวางไฟล์.[0] | . แต่การดึงข้อมูลทุกรุ่นอนุญาตให้มีการสอบถามเช่นjq '.[] | .assets[] | .browser_download_url | select(endswith(".deb"))'...
Beni Cherniavsky-Paskin

ขอบคุณ Beni curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | jq --arg PLATFORM_ARCH "$(echo `uname -s`-`uname -m`)" -r '.assets[] | select(.name | endswith($PLATFORM_ARCH)).browser_download_url' | xargs sudo curl -L -o /usr/local/bin/docker-compose --url ผมขยายเกี่ยวกับเรื่องนี้สำหรับโลภล่าสุดนักเทียบท่า-การเขียน endswith เป็นมายากลและการใช้ซุ้มประตูช่วยให้ผมไม่สนใจไฟล์ whatever.sha256 |head -n 1ที่มักจะนำเสนอโดยไม่ต้องทำ
dragon788

8

โซลูชัน Linux อื่นที่ใช้ curl และ wget เพื่อดาวน์โหลดไฟล์ไบนารีเดียวจากหน้ารีลีสล่าสุด

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 รุ่นล่าสุดอย่างเงียบ ๆ (หลังจากเปลี่ยนเส้นทางตาม)

egrep -o '...' ใช้ regex เพื่อค้นหาไฟล์ที่คุณต้องการ

wget --base=http://github.com/ -i - แปลงเส้นทางสัมพัทธ์จากไปป์ไลน์เป็น URL ที่สมบูรณ์

และ-O scollectorตั้งชื่อไฟล์ที่ต้องการ

อาจสามารถเพิ่ม-Nเพื่อดาวน์โหลดได้เฉพาะในกรณีที่ไฟล์ใหม่กว่า แต่ S3 ให้ข้อผิดพลาด 403 Forbidden


3
เป้าหมายของฉันคือการสร้างลิงก์บนเว็บไซต์ที่ชี้ไปที่เวอร์ชันล่าสุดเสมอ คำสั่ง linux จะไม่อนุญาต
Christian Rondeau

1
นี่คือสิ่งที่ฉันกำลังมองหา แต่คุณต้องแน่ใจว่าคุณมีอักขระ Escape ที่ถูกต้องสำหรับสัญลักษณ์แทนและจุดเมื่อใช้ grep
T. Thomas

@TdotThomas ขอบคุณนั่นคือคำใบ้ที่ฉันต้องการสำหรับตัวเลขการปล่อย semver เพื่อหลีกเลี่ยงช่วงเวลา\.เช่น 2.2.0 จำเป็น/download/[0-9\.]*/
Jeff Puckett

ไม่มันไม่ได้ ไม่มีอักขระหนี แต่ฉันจะเข้าใจตัวเป็นคำนำหน้าเช่นแท็กv v0.11.0เพียงแค่ป้อนcurl -s -L https://github.com/bosun-monitor/bosun/releases/latest | egrep -o '/bosun-monitor/bosun/releases/download/[v]?[0-9.]*/scollector-linux-armv6' | wget --base=http://github.com/ -i - -O scollectorCLI ของคุณและทำงานได้อย่างสมบูรณ์ ขอบคุณเกร็ก !!
MS Berends

7

ตามที่ระบุไว้ก่อนหน้านี้JQเป็นประโยชน์สำหรับการนี้และอื่น ๆAPIs REST

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"

โซลูชันสำหรับการเผยแพร่อะตอม

หมายเหตุแต่ละ 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
...

รับ URL ดาวน์โหลดสำหรับเนื้อหาที่ต้องการ

ด้านล่างatom-macคือสินทรัพย์ที่ฉันต้องการผ่าน jq'sselect(.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://jqplay.org/s/h6_LfoEHLZ

ความปลอดภัย

คุณควรใช้มาตรการเพื่อรับรองความถูกต้องของอาร์ติแฟกต์ที่ดาวน์โหลดผ่านsha256sum และ gpgหากเป็นไปได้


7

วิธีแก้ปัญหาโดยใช้ (ภายใน) wget เพื่อรับเนื้อหา HTML กรองสำหรับไฟล์ zip (พร้อม egrep) จากนั้นดาวน์โหลดไฟล์ zip (ด้วย wget ด้านนอก)

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

6

เพียงใช้หนึ่งใน URL ด้านล่างเพื่อดาวน์โหลดรุ่นล่าสุด: (ยกตัวอย่างเช่นใช้ URL จากโครงการ 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
เหล่านี้เป็น repos ที่ไม่เผยแพร่
Wobbles

5

ไม่สามารถทำได้ตามการสนับสนุนของ GitHub ณ วันที่ 2018-05-23

ติดต่อ support@github.com เมื่อวันที่ 2018-05-23 พร้อมข้อความ:

คุณยืนยันได้หรือไม่ว่าตอนนี้ไม่มีทางอื่นนอกจากยุ่งกับ 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'])

ดูสิ่งนี้ด้วย:

พิจารณาก่อนการเผยแพร่ด้วย

/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'])

4

หน้าความช่วยเหลือการเชื่อมโยงไปยังรุ่นล่าสุดกล่าวถึงปุ่ม "รุ่นล่าสุด" แต่ไม่ได้รับลิงก์ดาวน์โหลด

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

2
สิ่งนี้ยังคงต้องผลักดันเวอร์ชันใหม่ของgh-pagesสาขาทุกครั้งที่มีการเปิดตัวรุ่นใหม่ วัตถุประสงค์คือการมีลิงก์คงที่ฉันสามารถใช้เพื่อ "อ้างอิงถึงเวอร์ชันล่าสุด" ตอนนี้ตัวเลือกที่ดีที่สุดของฉันคือแค่ดูที่หน้าเผยแพร่
Christian Rondeau

@ChristianRondeau ฉันเห็นด้วย ฉันไม่เห็นที่ใดใน API ที่จะอ้างถึง URL แบบเต็มของไฟล์เก็บถาวร "ล่าสุด" โดยตรง
VonC

ยังคงขอบคุณสำหรับเคล็ดลับ; หากไม่มีคำตอบที่ดีกว่าฉันอาจจะทำสคริปต์เพื่ออัปเดต gh-pages โดยใช้สคริปต์ของคุณ
Christian Rondeau

3

ตอนนี้ Github รองรับลิงก์แบบคงที่สำหรับการดาวน์โหลดไฟล์แต่ละไฟล์จากรุ่นล่าสุด: https://help.github.com/en/articles/linking-to-releases

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

คำตอบเดียวกันนี้โพสต์ไปแล้วเมื่อ 6 เดือนก่อน: stackoverflow.com/questions/24987542/…
wisbucky

ขอบคุณที่แจ้งสิ่งนี้ให้ฉันทราบ @wisbucky ฉันปิดมันไปแล้วเนื่องจากฟังดูเหมือนเป็นการใช้งานที่กำหนดเองจากนักพัฒนาไม่ใช่คนจาก StackOverflow!
Christian Rondeau

2

ใน PHP - เปลี่ยนเส้นทางไปยังการดาวน์โหลดรุ่นล่าสุด เพียงวางบนเว็บสเปซของคุณ

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

2

หากคุณต้องการใช้curlคุณสามารถลอง-w '%{url_effective}'พิมพ์ URL หลังห่วงโซ่การเปลี่ยนเส้นทาง (ตามด้วย curl หากคุณเรียกใช้ด้วย-L) ตัวอย่างเช่น

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เอาท์พุท


2

เช่นเดียวกับการเยี่ยมชมคำถามนี้มากที่สุดฉันรู้สึกผิดหวังอย่างมากกับการหาวิธีดาวน์โหลดเวอร์ชันล่าสุดหรือ repo ใน Github โดยอัตโนมัติ ประโยชน์ของการแก้ปัญหานี้ก็คือว่าคุณไม่ได้มีการระบุการปล่อยหรือแท็กหมายเลขมันก็จะคว้าล่าสุด

ฉันทำการทดสอบโดยใช้ผู้ใช้ Github และ repo ต่อไปนี้:

" f1linux " = ผู้ใช้ Github
" pi-ap " = Repo

ชื่อไดเร็กทอรีที่กำหนดเองที่ repo ถูกบันทึกไว้ถูกตั้งค่าใน:

--one-top-level="pi-ap"

โดยตรง:

การใช้เครื่องมือ " นักพัฒนาเว็บ " ของ Firefox (แถบ 3 แถบที่มุมขวาบน) ในส่วน " เครือข่าย " ที่ฉันพบว่าhttps://api.github.comกำลังเปลี่ยนเส้นทางไปhttps://codeload.github.comดังนั้นการวางท่อcurlไปที่tarฉันจึงสามารถคว้า repo เวอร์ชันล่าสุดและบันทึกเป็นชื่อที่คาดเดาได้ดังนั้น สามารถใช้งานได้บน:

curl https://codeload.github.com/f1linux/pi-ap/legacy.tar.gz/master | tar xzvf - --one-top-level="pi-ap" --strip-components 1

ทางอ้อม:

หลังจากที่ฉันประสบความสำเร็จในการดาวน์โหลดเวอร์ชันล่าสุดโดยอัตโนมัติโดยใช้DIRECT URL ฉันก็หันมาสนใจการเปลี่ยนเส้นทางของ Github:

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1

วิธีที่ต้องการ:

อย่างไรก็ตามโปรดทราบตามความคิดเห็นของ Von ด้านล่างว่าINDIRECTเป็นวิธีที่ต้องการ

การตรวจสอบเพิ่มเติม:

เพื่อให้แน่ใจว่าผลลัพธ์ของฉันสามารถทำซ้ำได้กับ Github repos เวอร์ชันอื่นการทดสอบเดียวกันนี้ได้ดำเนินการสำเร็จแล้วสำหรับdoctlชุดเครื่องมือ API ของ Digital Ocean (ซึ่งเป็นสิ่งที่เริ่มต้นการออกกำลังกายทั้งหมดจริง!):

ทั้งDIRECTและINDIRECTโดยใช้รูปแบบเดียวกับด้านบนเพียงแค่เปลี่ยนชื่อผู้ใช้และ repo:

โดยตรง:

curl https://codeload.github.com/digitalocean/doctl/legacy.tar.gz/master | tar xzvf - --one-top-level="doctl" --strip-components 1 

ทางอ้อม:

curl -L https://api.github.com/repos/digitalocean/doctl/tarball | tar xzvf - --one-top-level="doctl" --strip-components 1

น่าสนใจ. โหวตแล้ว ฉันไม่ทราบเกี่ยวกับ codeload แม้ว่าจะยังแนะนำให้ใช้ API: stackoverflow.com/a/60198721/6309
VonC

ฉันพบกับความเศร้าโศกกับการเปลี่ยนเส้นทางในตอนแรกและตามที่ระบุไว้ในคำตอบเครื่องมือ "Web Developer" ของ Firefox ทำให้ฉันไปถูกทางแล้ว ไม่สามารถหยุดเพียงแค่นั้นต้องทำให้มันทำงานร่วมกับการเปลี่ยนเส้นทาง ขอบคุณสำหรับการโหวตมากที่สุด
F1Linux

1
@VonC เพียงแค่เพิ่มความคิดเห็นของคุณในคำตอบ ฉันไม่รู้เรื่องนี้เลย ขอบคุณที่ชี้ให้ดู!
F1Linux

1

ฉันต้องการดาวน์โหลดรีลีสจากREADME.mdไฟล์ในคำอธิบายที่เก็บ ที่นั่นฉันไม่สามารถรัน JavaScript ได้

ฉันสามารถเพิ่มลิงก์เหล่านี้ในไฟล์ README หรือหน้า github สำหรับที่เก็บทั้งหมดของฉัน:

  • https://niccokunzmann.github.io/download_latest/<USER>/<REPOSITORY>/<FILE>
    ดาวน์โหลดไฟล์รีลีสล่าสุดจากที่เก็บ
  • https://niccokunzmann.github.io/download_latest/<FILE>
    งานนี้เพราะอ้างอิง JavaScript document.referrerถูกตั้งค่าและพื้นที่เก็บข้อมูลในการดาวน์โหลดถูกกำหนดผ่าน ดังนั้นลิงค์จะใช้ได้กับส้อม

คุณสามารถค้นหาซอร์สโค้ดได้ที่นี่แยกหรือใช้ repo ของฉัน


1
นั่นเป็นความคิดที่ค่อนข้างฉลาด :) มันจะใช้ไม่ได้เมื่อแชร์ลิงก์หรือใช้ curl หรือไลค์ แต่แนวคิดนี้สามารถทำได้ในหน้า github ของโครงการ
Christian Rondeau

1
เนื่องจากเป็นไปได้ว่าเป็นเว็บไซต์ JavaScript คุณสามารถเขียนบริการที่เปลี่ยนเส้นทางได้ download-service.com/organization/repository/artifact
ผู้ใช้

1

สำหรับ Linux

ฉันเห็นคำตอบที่ได้รับการยอมรับข้างต้น

A few years late, but I just implemented a simple redirect to support https://github.com/USER/PROJECT/releases/latest/download/package.zip. That should redirected to the latest tagged package.zip release asset. Hope it's handy!

โดยJoshua Peekแต่ความคิดเห็นระบุว่าไม่รองรับชื่อไฟล์เวอร์ชัน

หลังจากค้นหาบิตฉันได้สร้างการโทรหนึ่งบรรทัดที่ใช้ได้กับชื่อไฟล์เวอร์ชัน ใช้ curl เพื่อรับไฟล์เวอร์ชันล่าสุดจากนั้นใช้ประโยชน์จากการสนับสนุนการเปลี่ยนเส้นทางที่เพิ่มเข้ามาเพื่อดาวน์โหลดไฟล์เวอร์ชันล่าสุด

wget $'https://github.com/<UMBRELLA PROJECT>/<REPO NAME>/releases/latest/download/<FILE NAME START>-'$(curl -s https://github.com/<UMBRELLA PROJECT>/<REPO NAME>/releases/latest | grep -o -P '(?<=releases/tag/).*(?=\">)')$'<FILE NAME END>'

ดังนั้นจึงกำหนดเป้าหมายไฟล์ที่มีชื่อเหมือน<REPO NAME>-linux64_arm-<VERSION NUMBER>.tar.gzบนหน้าเว็บhttps://github.com/<UMBRELLA PROJECT>/<REPO NAME>/releases/latestหลังจากเปลี่ยนเส้นทาง ทำได้โดยการค้นหา<VERSION NUMBER>ระหว่างreleases/tag/และ">ในข้อความที่ส่งคืนจากการเรียก curl เพื่อให้ชัดเจนจริงๆ<FILE NAME START>คือ<REPO NAME>-linux64_arm-และ<FILE NAME END>เป็น.tar.gzตัวอย่างข้างต้น รับSTARTและENDบิตโดยดูสิ่งที่https://github.com/<UMBRELLA PROJECT>/<REPO NAME>/releases/latestใช้เป็นรูปแบบการตั้งชื่อไฟล์

ฉันสร้างสิ่งนี้ขึ้นมาโดยเลียนแบบว่าคนอื่นใช้ grep และ curl อย่างไรและเพิ่งได้เรียนรู้สิ่งเหล่านี้ทั้งหมดในตอนนี้ดังนั้นโปรดแจ้งให้ฉันทราบว่ามันกำลังทำอะไรที่ซุกซนจริง ๆ ซึ่งฉันจะไม่เข้าใจ! นอกจากนี้ฉันกำลังพูด<UMBRELLA PROJECT>แต่ชื่อผู้ใช้ก็ควรจะไปที่นั่นได้เช่นกัน ตะโกนไปที่https://stackoverflow.com/a/13245961/2403531สำหรับการโทร grep https://unix.stackexchange.com/a/10264สำหรับการเชื่อมต่อ $ string $


1

ในกรณีที่คุณต้องการใช้ในเทือกเขาแอลป์ให้ทำตามขั้นตอนต่อไปนี้

 apk add curl ca-certificates wget

wget -q $(curl -s https://api.github.com/repos/<USER>/<REPOSITORY>/releases/latest | grep browser_download_url | grep "$ARCH" | cut -d '"' -f 4)

-q ใน wget เป็นโหมดที่ค่อนข้างถ้าคุณต้องการดูผลลัพธ์ให้ใช้โดยไม่ใช้ q


0

ในกรณีที่ repo ใช้เพียงแท็กแทน release - cf. jQuery - โซลูชันที่ใช้ URL เดียวไม่ทำงาน

แต่คุณต้องค้นหาแท็กทั้งหมดเรียงลำดับและสร้าง URL ดาวน์โหลด ผมดำเนินการแก้ปัญหาดังกล่าวสำหรับภาษาที่ไปและ repo jQuery นี้: เชื่อมโยงไปยัง Github

บางทีนี่อาจช่วยใครบางคนได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.