Есть ли способ программно получить zipball из частного репозитория github?
У нас возникла необходимость получить zipball частного репо. Для общедоступных это довольно просто, либо через GitHub API, либо вручную (https://github.com/user/repo/zipball/master). Но как насчет частных репо? Не совсем понятно, как это сделать, даже имея токен oAuth.
7 ответов
Новая альтернатива
Поскольку данный принятый ответ больше не работает, я подумал, что объясню, как я смог сделать это с новыми изменениями в github API.
Новый Скачать Api Link
Сначала я нашел информацию о загрузке архива здесь: https://developer.github.com/v3/repos/contents/
Публичный репо
Если это публичное репо, то это очень просто... вы можете сделать:
curl -L https://api.github.com/repos/pengwynn/octokit/tarball > octokit.tar.gz
Частный репо
Если это частное репо, вам нужно создать токен oAuth, зайдя в настройки и выбрав "Настройки разработчика" / "Токены личного доступа". Я создал личный токен.
Затем, используя инструкции на следующей странице, я узнал, как получить личное репо, на которое у вас есть разрешение: https://developer.github.com/v3/
Полный код
curl -H "Authorization: token ab499f3b..." \
-L https://api.github.com/repos/godzilla/my_priv_repo/tarball > wut.tar.gz
Не забудьте заменить ab499f3b...
с вашим фактическим токеном.
cURL, который позволяет управлять HTTP-заголовком и параметрами запроса. Например:
curl -L
-H "Авторизация: токен $TOKEN"
https://api.github.com/repos/octocat/Hello-World/zipball --output hello.tar.zip
ИЛИ
curl -L https://api.github.com/repos/octocat/Hello-World/zipball?access_token=$TOKEN --output hello.tar.zip
Изменить: это больше не работает.
с CURL:
curl -L -F "login=$USER" -F "token=$TOKEN" https://github.com/$USER/$REPO/$PKGTYPE/$BRANCHorTAG
где $TOKEN
это токен API в вашем профиле github, а не токен oAuth2, используемый для связи с APIv3.
$USER
учетная запись пользователя, с которой связан токен, не обязательно организация / другой пользователь, к которому принадлежит репо. Второй экземпляр $USER
это пользователь / учетная запись репо.
$REPO
это имя частного хранилища
$PKGTYPE
это тарбол или зипбол и $BRANCHorTAG
является веткой, как master, или именем тега для коммита.
Первый экземпляр $USER
должен иметь доступ к репо, принадлежащему второму экземпляру $USER
,
Я не мог найти это документированное в любом месте, поэтому я также немного написать об этом, если вы хотите что-нибудь более подробное.
Я столкнулся с той же проблемой, и это сработало для меня (по состоянию на февраль 2015 года):
curl -O -J -L -u $YOUROAUTHKEY:x-oauth-basic https://github.com/$USER/$REPO/archive/master.zip
Решения oAuth в качестве заголовка не работали для меня, но работали, вставляя ключ в имя пользователя и указав тип. Затем он дал 302 для перенаправления с соответствующей ссылкой.
Подробная команда действительно помогла мне выяснить, были ли приняты учетные данные, которые я использовал (404 против 401)
Кроме
api.github.com
, вы можете скачать tarball / zipball из
github.com
напрямую:
(Заголовок токена
-H "Authorization: token $(yourToken)"
может быть опущен для публичного репо)
curl -H "Authorization: token $(yourToken)" -o code.tar.gz -L https://github.com/$(username)/$(reponame)/archive/$(branchName/TagName/hashValue).tar.gz
curl -H "Authorization: token $(yourToken)" -o code.zip -L https://github.com/$(username)/$(reponame)/archive/$(branchName/TagName/hashValue).zip
Вы можете сгенерировать токен в соответствии с этим ответом /questions/18234425/est-li-sposob-programmno-poluchit-zipball-iz-chastnogo-repozitoriya-github/18234428#18234428
Кажется, у меня нет проблем с загрузкой zipball из частных репозиториев. Я использую тот же формат, который вы указали, и он отлично работает.
Я использую OAuth2, чтобы получить репозитории, но я создаю ссылку для почтового индекса, используя формат, который вы указали. Вот приложение, в котором я делаю это.
Если вы хотите получить токен OAuth2, просто используйте формат GitHubt API v3, это довольно просто. Хотя это не совсем подходит к вашей проблеме:
Вот как я получаю токен OAuth2 от GitHub для этого расширения Chrome
ОБНОВИТЬ
@jayarjo Я строю URL здесь в строке 202. Я просто создаю URL, подобный указанному вами, токен OAuth2 даже не используется для него. Все, что мне позволяет токен, - это выборка личных данных всех пользователей перед созданием разметки. Но это работает без проблем...
Я думаю, что причина, по которой я действительно могу скачать zipball, заключается в том, что URL -адрес на самом деле https://github.com/ * и потому что я в настоящее время вошел в систему из-за OAuth2, у меня есть разрешение на доступ к этому URL - где Похоже, вы этого не сделаете, поэтому вы получите ошибку 404.
Вы можете попробовать отправить запрос на страницу, и если вы получите сообщение об ошибке, предложите пользователю сначала войти в систему, а затем, когда вы запросите zipball, у вас не должно возникнуть проблем.
Вы можете использовать обычную аутентификацию или метод, основанный на токене. См. https://help.github.com/articles/downloading-files-from-the-command-line для получения более подробной информации.