Wie lade ich mit cURL einen Tarball von GitHub herunter?

92

Ich versuche, einen Tarball mit cURL von GitHub herunterzuladen , aber er scheint nicht umzuleiten:

$ curl --insecure https://github.com/pinard/Pymacs/tarball/v0.24-beta2
<html><body>You are being <a href="https://nodeload.github.com/pinard/Pymacs/tarball/v0.24-beta2">redirected</a>.</body></html>

Hinweis: wget funktioniert bei mir:

$ wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2

Ich möchte jedoch cURL verwenden, weil ich es letztendlich inline mit etwas wie:

$ curl --insecure https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx

Ich habe festgestellt, dass die URL nach der Umleitung https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz lautet , aber ich möchte, dass cURL intelligent genug ist, um herauszufinden das raus.

Salzkranich
quelle

Antworten:

147

Verwenden Sie die -LOption, um Weiterleitungen zu folgen:

curl -L https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx
Salzkranich
quelle
3
Denn httpsSie werden wahrscheinlich auch brauchen -k.
Nicerobot
1
Warum gibt es in letzter Zeit Probleme mit Zertifikaten auf raw.github.com? Ich hatte Probleme, Homebrew und RVM auf einer neuen Maschine zu installieren. Ich habe von der Homepage kopiert und eingefügt und habe gearbeitet. Jetzt erhalte ich das Zertifikatproblem: ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go )" curl: (60) SSL-Zertifikatsproblem: Lokales Ausstellerzertifikat kann nicht abgerufen werden Weitere Details hier: curl. haxx.se/docs/sslcerts.html curl führt standardmäßig die Überprüfung von SSL-Zertifikaten mithilfe eines "Bundles" durch. Wenn Sie die Überprüfung des Zertifikats durch curl deaktivieren möchten, verwenden Sie die Option -k (oder --insecure).
Chris Cinelli
Mmmm ... gibt es eine Möglichkeit, die Submodule auch in den Tarball aufzunehmen? Es scheint, dass für Submodule nur leere Verzeichnisse im Tarball erstellt werden.
Aurora
Ich bin mir nicht sicher, ob dies derzeit ein vorübergehendes Problem ist, aber github gibt derzeit einen internen Serverfehler von 500 zurück.
BT
15
Und nur um möglicherweise jemandem ein Google zu ersparen, müssen Sie -Lden Weiterleitungen folgen.
Steve Kehlet
45

Die modernisierte Methode hierfür ist:

curl -sL https://github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz | tar xz

Ersetzen user-or-org, repoundsha1-or-ref entsprechend.

Wenn Sie eine Zip-Datei anstelle eines Tarballs möchten, geben Sie .zipanstelle von an.tar.gz Suffix an.

Sie können auch das Archiv eines privaten Repos abrufen, indem Sie die -u token:x-oauth-basicOption zum Einrollen angeben. Durch tokenein persönliches Zugriffstoken ersetzen .

Pavel Repin
quelle
3
Von allen Antworten war dies genau das, wonach ich gesucht habe! Wenn Sie einen Oauth-Token haben, können Sie diesen direkt verwenden. https://[email protected]/user-or-org/repo/archive/sha1-or-ref.tar.gz
Svenevs
Wie würde dies beim Herunterladen von Releases anstelle von Archiven funktionieren?
Waspinator
1
@waspinator, ich benutze curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gzSiehe Beispiel hier
Wayne
Können Sie erklären, wie dies besser ist als die akzeptierte Antwort?
Robin Métral
14

Sie können wget auch verwenden, um »es inline zu entpacken«. Geben Sie einfach stdout als Ausgabedatei an ( -O -):

wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2 -O - | tar xz
stricken
quelle
2

Bei allen anderen Lösungen muss eine Versions- / Versionsnummer angegeben werden, die offensichtlich die Automatisierung unterbricht.

Diese Lösung kann jedoch programmgesteuert verwendet werden, um die NEUESTE Version ohne Angabe eines Tags oder einer Versionsnummer abzurufen und die Binärdatei für einen beliebigen Namen zu deaktivieren, den Sie in switch angegeben haben --one-top-level="pi-ap". Tauschen Sie einfach den Benutzer f1linux aus und repo pi-ap im folgenden Beispiel mit Ihren eigenen Daten und Bob ist Ihr Onkel:

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1
F1Linux
quelle
Das ist wunderschön, könnte aber wirklich eine Erklärung gebrauchen. zB welche GitHub API Version ist das und wo ist sie dokumentiert?
l3l_aze
1

mit einem bestimmten dir

cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx

Zhengquan
quelle
Besserer Weg cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
Zhengquan