2012-02-29 8 views
20

Tenemos la necesidad de buscar un zipball de un repositorio privado. Para los públicos, es bastante fácil, ya sea a través de GitHub API o manualmente (https://github.com/user/repo/zipball/master). ¿Pero qué hay de los repos privados? No es exactamente obvio cómo hacerlo incluso con token oAuth.¿Hay alguna forma de obtener programáticamente un zipball de repo de github privado?

+0

¿qué es esto "Zipball" ¿Me podría dar poco más descripción. –

+0

Es un archivo zip. – CMCDragonkai

Respuesta

25

Nueva Alternativa

Debido a que la respuesta aceptada dado no funciona más, pensé que iba a explicar lo que era capaz de hacerlo con los nuevos cambios en la API de GitHub.

La nueva API de descarga Enlace

En primer lugar, he encontrado información sobre cómo descargar el archivo aquí: https://developer.github.com/v3/repos/contents/#get-archive-link

Pública Repo

Si se trata de un acuerdo de recompra pública, entonces es muy fácil ... puede hacer:

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

Repo privada

Si se trata de un acuerdo de recompra es privada, es necesario crear un token de OAuth yendo a su perfil y luego seleccionar "Aplicación". (https://github.com/settings/applications) Creé un token personal.

Luego, utilizando las instrucciones en la página siguiente descubrí cómo llegar repo privada que tiene permiso para: https://developer.github.com/v3/#authentication

Código completo

gusta esta

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

Sea Asegúrese de reemplazar ab499f3b... con su token actual.

1

No parece que tenga problemas para descargar un zipball de los repositorios privados. Utilizo el mismo formato que ha especificado y funciona perfectamente.

Uso OAuth2 para obtener los repositorios, pero construyo el enlace para la bola zip usando el formato que ha proporcionado. Here is the application Hago esto en.

Si está buscando obtener un token OAuth2, simplemente use el formato GitHubt API v3, es bastante simple. Aunque esto no se ajusta exactamente su problema:

This es cómo consigo un token OAuth2 de GitHub para this chrome extension

ACTUALIZACIÓN

@jayarjo I build the URL here on line 202. Acabo de construir la URL como la que especificó, el token OAuth2 ni siquiera se usa para eso. Todo lo que mi token me permite hacer es buscar todos los datos privados de los usuarios antes de crear el marcado. Pero funciona sin ningún problema ...

Creo que la razón por la que realmente puedo descargar el zipball es porque el URL es realmente https://github.com/ * y porque estoy actualmente conectado por el OAuth2, tengo permiso para obtener a esa URL, donde como suena como que no lo hace, aparece un error 404.

Puede intentar enviar una solicitud a la página y si recibe una respuesta de error, solicite al usuario que inicie sesión primero, y luego cuando solicite la bola de descarga rápida no debería tener ningún problema.

+0

Extraño ... Me sale un error "no encontrado" cada vez que lo intento. Además, cuando utilizo el mismo formato que he especificado, ¿no estoy seguro de dónde colocar el token allí? ¿Se puede vincular una línea de código específica donde se hace esto? – jayarjo

+0

@jayarjo Actualicé mi respuesta: básicamente, el usuario debe haber iniciado sesión para que la URL esté disponible para ellos. Entonces no obtendrás un 404 – jjNford

+0

Pero busco el token (quiero decir, lo tengo en el momento en que pruebo esa url). ¿Pero es esto todo lo que haces y funciona? Tal vez pase por alto algo simple aquí ... – jayarjo

2

con curl:

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

donde $TOKEN es el token de API en su perfil github, no un token OAuth2 utilizado para comunicarse con el APIv3.

$USER es la cuenta de usuario con la que se conecta el token, no necesariamente la organización/otro usuario al que pertenece el repositorio. La segunda instancia de $USER es el usuario/cuenta del repositorio.

$REPO es el nombre del depósito privado

$PKGTYPE es tar o zipball y $BRANCHorTAG es una rama, como maestro, o un nombre de etiqueta para una confirmación.

La primera instancia de $USER debe tener acceso al repositorio perteneciente a la segunda instancia de $USER.

No pude encontrar esta documentada en CUALQUIER LUGAR, así que también tengo un pequeño escrito sobre esto si quieres algo más detallado.

+0

No estoy seguro si esto funciona más: http://stackoverflow.com/questions/10418596/cant-find-api-token-in-github –

2

me encontré con el mismo problema y esto funcionó para mí (a partir de Feb 2015):

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

El ouath como soluciones de cabecera no funcionó para mí, pero lo que funcionó fue el relleno de la llave en la nombre de usuario y tipo de especificación. Luego dio un 302 para redirigir con el enlace adecuado.

comando detallado realmente ayudó a localizar averías si las credenciales que estaba usando eran aceptadas o no (404 vs 401)

Cuestiones relacionadas