Як завантажити tarball з GitHub за допомогою cURL?


93

Я намагаюся завантажити tarball з GitHub за допомогою cURL , але, схоже, це не перенаправляє:

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

Примітка: wget працює для мене:

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

Однак я хочу використовувати cURL, тому що в кінцевому підсумку хочу зняти його з вбудованого файлу чимось на зразок:

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

Я виявив, що URL-адреса після перенаправлення виявилася https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz , але я хотів би, щоб cURL був досить розумним, щоб зрозуміти це з.

Відповіді:


148

Використовуйте -Lопцію для перенаправлення:

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

3
Адже httpsвам, ймовірно, також знадобиться -k.
nicerobot

1
Чому останнім часом на raw.github.com виникають проблеми із сертифікатами? У мене були проблеми з встановленням homebrew та rvm на новій машині. Раніше я копіював та вставляв із домашньої сторінки і працював. Тепер я отримую проблему сертифіката: ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go )" curl: (60) Проблема сертифіката SSL: не вдається отримати сертифікат місцевого емітента Детальніше тут: curl. haxx.se/docs/sslcerts.html curl виконує перевірку сертифіката SSL за замовчуванням, використовуючи "пакет" .. Якщо ви хочете вимкнути перевірку сертифіката curl, використовуйте параметр -k (або --insecure).
Chris Cinelli

Мммм ... чи є можливість включити підмодулі також у tarball? Здається, що для підмодулів у tarball створюються лише порожні каталоги.
полярне сяйво

Не впевнений, що це тимчасова проблема зараз, але github повертає 500 внутрішніх помилок сервера для цього на даний момент.
BT

15
І просто потенційно врятувати когось у Google, -Lозначає слідувати за переспрямуваннями.
Steve Kehlet

45

Модернізований спосіб зробити це:

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

Замінити user-or-org, repoіsha1-or-ref відповідним чином .

Якщо ви хочете zip-файл замість tarball, вкажіть .zipзамість.tar.gz суфікса.

Ви також можете отримати архів приватного репо, вказавши -u token:x-oauth-basicопцію згортання. Замініть tokenна персональний маркер доступу.


3
з усіх відповідей це було саме те, що я шукав! Якщо у вас є маркер oauth, ви можете використовувати його безпосередньо; https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz
свінев

як би це працювало для завантаження з випусків замість архівів?
waspinator

1
@waspinator, я використовую curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gzДив. приклад тут
Уейн,

Чи можете ви пояснити, чим це краще прийнятої відповіді?
Робін Метраль

14

Ви також можете використовувати wget, щоб «зняти з нього вбудований файл». Просто вкажіть stdout як вихідний файл ( -O -):

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

2

Для всіх інших рішень потрібно вказати номер випуску / версії, що, очевидно, порушує автоматизацію.

Це рішення - на даний момент перевірене та відоме для роботи з Github API v3 - однак його можна використовувати програмно для отримання ОСТАННЬОГО випуску, не вказуючи жодного тегу чи номера випуску, і скасовує TAR двійковий файл до довільного імені, яке ви вказали в перемикачі --one-top-level="pi-ap". Просто поміняйте користувача f1linux та repo pi-ap у наведеному нижче прикладі з вашими власними даними, а Боб - ваш дядько:

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

Це прекрасно, але справді можна використати якесь пояснення. наприклад, яка версія GitHub API це і де це задокументовано?
l3l_aze

1
@ l3l_aze Щойно відредагував відповідь, включаючи поточний номер версії API Githib, моє рішення протестовано і, як відомо, працює. Дякуємо за ваш відгук! - T
F1Linux

Вау. Я не думав, що це може стати кращим за те, що ти вже поділився. Велике спасибі!
l3l_aze

1

з конкретним реж

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


ще кращий спосіб cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
zhengquan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.