Как загрузить архив с GitHub с помощью cURL?


93

Я пытаюсь загрузить архив с 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).
Крис Чинелли,

Мммм ... есть ли возможность включить субмодули в архив? Кажется, что для подмодулей в тарболе создаются только пустые каталоги.
Аврора

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

15
И просто потенциально спасти кого-то от Google -Lозначает следовать перенаправлениям.
Стив Кехлет

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параметр curl. Заменить tokenс личным маркером доступа.


3
из всех ответов это было именно то, что я искал! Если у вас есть токен oauth, вы можете использовать его напрямую; https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz
svenevs

как это будет работать при загрузке из релизов вместо архивов?
waspinator

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

Вы можете объяснить, чем это лучше принятого ответа?
Робин Метраль,

Может быть, потому что .../tarball/...метод производит только tar.gz? Позже GH добавила более гибкий метод, позволяющий извлекать архив в желаемом формате на основе суффикса .tar.gzили .zip. Я уже не помню, зачем написал этот пост.
Павел Репин

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 двоичный файл на произвольное имя, указанное в switch --one-top-level="pi-ap". Просто замените пользователя f1linux и репо pi-ap в приведенном ниже примере с вашими собственными данными и вашим дядей Бобом:

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

Это красиво, но для этого действительно нужно какое-то объяснение. например, какая это версия API GitHub и где она задокументирована?
l3l_aze

1
@ l3l_aze Только что отредактировал ответ, в котором указан текущий номер версии Githib API, с которым мое решение протестировано и работает с ним. Спасибо за отзыв! - 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


more better way 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.