Ссылка для скачивания GitHub Api в формате zip или tarball

Здесь была хорошая ссылка о том, как создается строка zip/tarball.

Когда я загружаю zip-файл с github, что представляет собой шестнадцатеричная строка в конце имени файла?

Но я смотрю на GitHub APIv3, и мне было любопытно, не упустил ли я что-то.

  1. Есть ли способ получить ссылку на zip/tarball через вызов API?

  2. Если нет, есть ли способ построить эту строку без использования бинарного файла или библиотеки git? То есть могу ли я использовать различные вызовы API для извлечения нужных данных и их сборки по нужному мне URL-адресу?

Я знаю, что второй вопрос немного неуместен для stackoverflow, и для меня это немного забавный проект, поэтому я бы предпочел, чтобы по второму вопросу вы просто подтолкнули меня в правильном направлении, а не бросили фрагмент кода . Или просто сказал мне, если это возможно.


person mkly    schedule 04.12.2011    source источник


Ответы (2)


Вы можете wget выйти из репозитория GitHub, чтобы получить tar-файл (архив):

wget --no-check-certificate https://github.com/User/repo/archive/master.tar.gz

# better, if the certificate authorities are present:
wget https://github.com/User/repo/archive/master.tar.gz

предоставит вам файл с именем «мастер» из пользовательского репозитория «Пользователь».

обновленная версия 3 URL-адрес API:

https://api.github.com/repos/User/repo/:archive_format/:ref
#
# two possibilities for fomat:
https://api.github.com/repos/User/repo/tarball/master
https://api.github.com/repos/User/repo/zipball/master

# from github example:
$curl -L https://api.github.com/repos/octokit/octokit.rb/tarball > octokit.tar.gz

Затем можно tar xpvf master, получив полный архив. Он создаст каталог в соответствии с соглашением об именах, описанным в упомянутый вами вопрос.

Для получения архива с GitHub не требуется двоичный файл git благодаря их служба загрузки Nodeload.


ligemer предложил в отредактируйте следующий пример:

Правка 2016-08-25 — Пример оболочки с Wget, Variables и Untar:

#!/bin/bash -ex

# arguments:
# token = $1
# organization = $2
# repo name = $3
# branch = $4

wget --header="Authorization: token ${1}" --header="Accept:application/vnd.github.v3.raw" -O - https://api.github.com/repos/${2}/${3}/tarball/${4} | tar xz

Звонить через:

$ scriptName.sh token my-organization site.com master

Приведенная выше команда загрузит и извлечет папку Github в тот же каталог, что и скрипт.


Диого Квинтела предлагает в комментариях:

Следующий пример позволяет загружать, извлекать и вырезать каталог верхнего уровня.

curl -L https://api.github.com/repos/octokit/octokit.rb/tarball | tar xz --strip=1 
person VonC    schedule 04.12.2011
comment
Спасибо. В настоящее время я получаю это через curl. Мне просто любопытно, есть ли способ получить ссылку для скачивания через API. Я знаю, что это не столько полезно, сколько мое собственное любопытство. - person mkly; 05.12.2011
comment
@Mike: для получения архива с GitHub не требуется никакого API, о котором я знаю. Суть в том, чтобы предложить прямую ссылку для использования. - person VonC; 05.12.2011
comment
Прохладный. Спасибо. Думаю, я отмечу ответ и пойду дальше. Спасибо вам обоим за ваши советы. Я ценю это. - person mkly; 05.12.2011
comment
Что делать, если репозиторий частный? В любом случае, чтобы получить зипбол в этом случае? - person jayarjo; 29.02.2012
comment
@jayarjo хороший вопрос. Я не уверен (если только вы не являетесь владельцем этого репо). - person VonC; 29.02.2012
comment
Да, но мне нужно запросить ссылку на скачивание из скрипта. Вероятно, его нужно как-то авторизовать. - person jayarjo; 29.02.2012
comment
Сейчас не работает, я пробую вашу команду, просто получаю файл мачты, не получаю файл tarball - person Mr Lou; 09.04.2012
comment
@janwen вы всегда получаете файл с именем «master». Но попробуйте 'tar xpvf master, и вы увидите: это работает! Этот файл 'master' на самом деле является архивом. - person VonC; 09.04.2012
comment
@janwen см. пример в самом начале: raw.github.com/ VonC/compileEverything/master/.cpl/doc. Вот как я загружаю архив своего проекта. - person VonC; 09.04.2012
comment
Спасибо @Ligemer за пример. - person VonC; 26.08.2016
comment
Следующий пример позволяет загружать, извлекать и вырезать каталог верхнего уровня curl -L https://api.github.com/repos/octokit/octokit.rb/tarball | tar xz --strip=1. - person Diogo Quintela; 01.11.2016
comment
@DiogoQuintela Спасибо. Я включил ваш комментарий в ответ для большей наглядности. - person VonC; 01.11.2016

Синтаксис описан в документации:

GET /repos/:owner/:repo/:archive_format/:ref

Следующий пример URL будет указывать (через перенаправление 302) на zip-архив master в hadley/devtools:

https://api.github.com/repos/hadley/devtools/zipball/master

(Другой вариант для archive_formattarball.)

Я понятия не имею, с каких пор этот API доступен.

person krlmlr    schedule 07.05.2014
comment
Эй, есть ли способ загрузить только одну папку? как только папка R в вашем примере. - person samayo; 19.11.2014
comment
@samaYo: я не знаю, как добиться этого через API, но вы можете попробовать git archive --remote=... <tree-ish> <path>. Мне было бы интересно узнать, работает ли это с GitHub ;-) - person krlmlr; 20.11.2014
comment
@samayo Альтернативный способ - разархивировать нужную папку. Вот пример, который я использую при загрузке архива github, где мне нужна только папка src tar -xzf archive.tar.gz $(tar -tzf archive.tar.gz | head - 1 )источник --strip 1 - person Tirsvad; 04.01.2021