2012-02-29 15 views
20

Abbiamo avuto la necessità di recuperare una zipball di un repository privato. Per quelli pubblici è piuttosto facile tramite GitHub API o manualmente (https://github.com/user/repo/zipball/master). Ma per quanto riguarda i repository privati? Non esattamente ovvio come farlo anche con token oAuth.Esiste comunque la possibilità di scaricare a livello di programmazione una zipball di repository privato di github?

+0

che cosa è questo "Zipball" Potete per favore darmi po 'più di descrizione. –

+0

È un file zip. – CMCDragonkai

risposta

25

nuova alternativa

Poiché la data risposta accettata non funziona più, ho pensato di spiegare come sono stato in grado di farlo con i nuovi cambiamenti nella API github.

il nuovo download Api link

In primo luogo, ho trovato informazioni su come scaricare l'archivio qui: https://developer.github.com/v3/repos/contents/#get-archive-link

pubblico Repo

Se si tratta di un pronti contro termine pubblico allora è molto facile ... si può fare:

 
curl -L https://api.github.com/repos/pengwynn/octokit/tarball > octokit.tar.gz 

Repo privato

Se è si tratta di un pronti contro termine privato, è necessario creare un token OAuth andando al vostro profilo e quindi selezionando "Applicazione". (https://github.com/settings/applications) Ho creato un token personale.

Poi seguendo le istruzioni nella pagina seguente ho scoperto come ottenere repo privata che avete il permesso di: https://developer.github.com/v3/#authentication

Codice completa

Ti piace questa

 
curl -H "Authorization: token ab499f3b..." \ 
-L https://api.github.com/repos/godzilla/my_priv_repo/tarball > wut.tar.gz 

Be sicuro di sostituire ab499f3b... con il tuo token effettivo.

1

Non sembra che si verifichi un problema durante il download di un file zip dai repository privati. Io uso lo stesso formato che hai specificato e funziona perfettamente.

Io uso OAuth2 per ottenere i repository ma costruisco il collegamento per lo zip ball utilizzando il formato che hai fornito. Here is the application Io faccio questo.

Se stai cercando di ottenere un token OAuth2, usa il formato GitHubt API v3, è piuttosto semplice. Anche se questo non va bene per il problema esattamente:

This è come ottenere un token OAuth2 da GitHub per this chrome extension

UPDATE

@jayarjo I build the URL here on line 202. Ho appena creato l'URL come quello che hai specificato, il token OAuth2 non è nemmeno usato per questo. Tutto il mio token mi consente di recuperare tutti i dati privati ​​degli utenti prima di creare il markup. Ma funziona senza alcun problema ...

Penso che il motivo per cui sono effettivamente in grado di scaricare lo zipball è perché l'URL è in realtà per https://github.com/ * e perché attualmente sto Firmato a causa della OAuth2 ho il permesso di ottenere a quell'URL: dove sembra che tu non sia così ottieni un errore 404.

È possibile provare a inviare una richiesta alla pagina e se si riceve una risposta di errore, chiedere all'utente di eseguire prima il login, quindi quando si richiede lo zipball non si dovrebbe ottenere alcun problema.

+0

Strano ... Ricevo l'errore "non trovato" ogni volta che provo. Inoltre, quando si utilizza lo stesso formato, non ho specificato dove collocare il token in quel punto? .. Puoi collegare una specifica riga di codice dove lo fai? – jayarjo

+0

@jayarjo Aggiornato la mia risposta - in sostanza l'utente deve essere loggato affinché l'URL sia disponibile per loro. Quindi non avrai un 404 – jjNford

+0

Ma prendo il token (voglio dire che ce l'ho nel momento in cui provo quell'URL). Ma questo è tutto ciò che fai e funziona? Forse trascuro qualcosa di semplice qui ... – jayarjo

2

con CURL:

curl -L -F "login=$USER" -F "token=$TOKEN" https://github.com/$USER/$REPO/$PKGTYPE/$BRANCHorTAG 

dove $TOKEN è il token API sul profilo github, non un token OAuth2 utilizzato per comunicare con l'APIv3.

è l'account utente a cui è collegato il token, non necessariamente l'organizzazione/altro utente a cui appartiene il repository. La seconda istanza di $USER è l'utente/account del repository.

$REPO è il nome del repository privato

$PKGTYPE è tarball o zipball e $BRANCHorTAG è un ramo, come il padrone, o un nome di tag per un commit.

La prima istanza di $USER deve avere accesso al repository appartenente alla seconda istanza di $USER.

Non ho potuto trovare questo documento DOVUNQUE, quindi ho anche un po 'di scrivere su di esso se volete qualcosa di più dettagliato.

+0

Non sono sicuro che funzioni più: http://stackoverflow.com/questions/10418596/cant-find-api-token-in-github –

2

mi sono imbattuto lo stesso problema e questo ha funzionato per me (come di febbraio 2015):

curl -O -J -L -u $YOUROAUTHKEY:x-oauth-basic https://github.com/$USER/$REPO/archive/master.zip 

L'ouath come soluzioni di intestazione non ha funzionato per me, ma che cosa ha funzionato era ripieno la chiave nella nome utente e tipo di specifica. Quindi ha dato un 302 per reindirizzare con il link corretto.

comando verbose davvero mi ha aiutato a guasti di se le credenziali stavo usando venivano accettati o no (404 vs 401)

Problemi correlati