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.

Antworten:


147

Verwenden Sie die -LOption, um Weiterleitungen zu folgen:

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

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 .


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://token@github.com/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

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

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.