Есть ли способ программно получить 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 для получения более подробной информации.

Другие вопросы по тегам