Descargar archivos individuales de GitHub

625

Supongo que la mayoría de ustedes, desarrolladores, usan cualquier VCS , y espero que algunos de ustedes usen Git. ¿Tiene algún consejo o truco sobre cómo obtener una URL de descarga para un solo archivo en un repositorio?

No quiero la URL para mostrar el archivo sin formato; en caso de binarios es para nada.

http://support.github.com/discussions/feature-requests/41-download-single-file

¿Es posible usar GitHub como un "servidor de descarga"?

Si decidimos cambiar a Google Code, ¿se presenta aquí la funcionalidad mencionada?

¿O hay algún hosting gratuito y VCS para proyectos de código abierto?

Radek Simko
fuente
3
La función de lanzamientos de GitHub ha intervenido para cumplir esta función.
pkamb
@RadekSimko DownGit puede ayudarte. Mira esta respuesta.
Minhas Kamal el
1
Para GitLab, consulte stackoverflow.com/a/51993087/6309 .
VonC
Esto no funcionará para todos, pero si usa pandas de Python, simplemente puede hacer algo como esto (también funciona para archivos grandes): haga clic en "ver en bruto" y luego copie la url del navegador y simplemente haga esto: df = pd.read_csv ( ' raw.githubusercontent.com/t-davidson/… ')
Graham Hesketh
Prueba Gitzip para Github para Chrome
subtleseeker

Respuestas:

580

Git no admite la descarga de partes del repositorio. Tienes que descargarlo todo. Pero deberías poder hacer esto con GitHub.

Cuando ve un archivo, tiene un enlace a la versión "en bruto". La URL se construye así

https://raw.githubusercontent.com/user/repository/branch/filename

Al completar los espacios en blanco en la URL, puede usar Wget o cURL (con la -Lopción, ver más abajo) o lo que sea para descargar un solo archivo. Una vez más, no obtendrá ninguna de las buenas funciones de control de versiones utilizadas por Git al hacer esto.

Actualización: Noté que mencionas que esto no funciona para archivos binarios. Probablemente no debería usar archivos binarios en su repositorio de Git, pero GitHub tiene una sección de descarga para cada repositorio que puede usar para cargar archivos. Si necesita más de un binario, puede usar un archivo .zip. La URL para descargar un archivo cargado es:

https://github.com/downloads/user/repository/filename

Tenga en cuenta que las URL indicadas anteriormente, desde los enlaces en adelante github.com, redirigirán a raw.githubusercontent.com. No debe usar directamente la URL proporcionada por este redireccionamiento HTTP 302 porque, según RFC 2616 : "Dado que la redirección podría ser alterada ocasionalmente, el cliente DEBERÍA continuar utilizando el URI de solicitud para futuras solicitudes".

jonescb
fuente
16
Nota para la posteridad: acabo de probarlo y usar raw funciona bien para archivos binarios.
emmby
1
intentado por un archivo zip de ~ 10 MB, error: Error: blob es demasiado grande
en
32
El formato de URL sugerido no funciona para mí. Me parece que https://raw.github.com/user/repository/branch/filename funciona.
Brian C.
55
@BrianC .: (al menos a partir del 27 de agosto de 2013) el formato de URL mencionado en la respuesta ( rawdespués del nombre del repositorio) ahora se redirige automáticamente al formato que menciona (nombre de host raw.github.com). En caso de duda, busque el archivo en cuestión en github.com y haga clic en el botón 'Sin procesar'.
mklement0
10
si aún desea usar curl, siga la redirección usando la opción -L en la línea de comando: curl -L -O github.com/user/repository/raw/branch/filename
Lynx-Lab
560
  1. Vaya al archivo que desea descargar.
  2. Haga clic para ver el contenido dentro de la interfaz de usuario de GitHub.
  3. En la parte superior derecha, haga clic derecho en elRaw botón.
  4. Guardar como...
novio
fuente
22
En lugar de "Guardar como", copie la URL. Esa es la URL del archivo. Ahora puede descargar con cualquier herramienta que utilice la URL para descargar: wget, su navegador, etc.
jgomo3
1
@MattParkins Lo acabo de probar y creo que sí funciona ahora para archivos grandes (incluso archivos binarios con la advertencia "no podemos mostrar archivos que son tan grandes en este momento")
lmsurprenant
3
Deje de seguir estos pasos detallados, use esta extensión de Chrome para hacerlo. chrome.google.com/webstore/detail/github-mate/…
Cam Song
3
¡Dios mío, una respuesta concisa, directa, fácil de leer y comprender, que no solo tiene sentido, sino que funciona sin necesidad de ningún BS externo de terceros! Si solo todas las respuestas de StackOverflow fueran tan sencillas. Gracias.
Padawan
2
Esto funcionó para un solo archivo C #. Quizás github debería agregar otro botón para descargar. Hacer clic derecho en un botón no es muy intuitivo.
Nick
39

Puede usar la API V3 para obtener un archivo sin formato como este (necesitará un token OAuth):

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/owner/repo/contents/path

Todo esto tiene que ir en una línea. La -Oopción guarda el archivo en el directorio actual. Puede usar -o filenamepara especificar un nombre de archivo diferente.

Para obtener el token OAuth, siga las instrucciones aquí: https://help.github.com/articles/creating-an-access-token-for-command-line-use

También he escrito esto como una esencia: https://gist.github.com/madrobby/9476733

thomasfuchs
fuente
44
Este es bueno, pero desafortunadamente solo admite archivos de hasta 1 MiB de tamaño.
Según Lundberg, el
1
Si ejecuta esto dentro de un programa, asegúrese de que User-Agent esté configurado.
Zugwalt
1
¿Puedes dar algunos ejemplos del camino? Si el repositorio es my-repo y el archivo que desea obtener está en x / y / z.txt, entonces la URL sería ... Fue difícil descubrir que / owner / repo / debería ser completado por mí. Gracias.
Gray
Esto funciona bien pero hay un inconveniente. No siempre es la última versión de un archivo. Intente realizar una modificación en un archivo, no espere demasiado e intente recuperar el archivo utilizando este método. En su lugar, obtendrá solo la versión anterior.
pacomix
34

Según esta esencia , puede usar wget o cURL:

  1. Haga clic en el nombre del archivo en un repositorio de GitHub.
  2. Haga clic en Raw para mostrar el contenido del archivo.
  3. Copie la URL en su navegador.
  4. En la línea de comando, ejecute:

    • wget --no-check-certificate --content-disposition https://URL-from-step3/
    • curl -LJO https://URL-from-step3/

    Uno más: en RHEL7.6, ejecute lo siguiente:

    • wget https://URL-from-step3/ --output-document=FILE_NAME
Ted Cox
fuente
Solía wgetseguir la ruta sin procesar al archivo fuente C que quería después de ver el archivo en el repositorio de github y hacer clic en el botón Raw. Trabajé como un campeón con Raspbian en mi Raspberry Pi 3.
Richard Chambers
Llegué un poco tarde al juego, pero esto funcionó perfectamente para mí. Ver el contenido en bruto y luego hacer clic con el botón derecho para descargar no funcionó para mi caso porque necesitaba el archivo en un formato específico, que no fue ofrecido por mi computadora. Sin embargo, los comandos de esta respuesta descargan todo tal como está.
Seankala
16

GitHub Mate hace que la descarga de un solo archivo sea fácil, solo haga clic en el ícono para descargar, actualmente solo funciona en Chrome.

Descargar GitHub Mate

Cam Song
fuente
1
@jcollum Comprobado en este momento, funciona para mí. ¿Puedes asegurarte de que estás utilizando la última versión? o hágame saber el error. Me alegra ayudarte a que funcione.
Cam Song
2
Estoy en la versión más nueva de Chrome, 34.0.1847.116, y esto seguramente no funciona. Qué sistema operativo estás usando? Estoy en OS X Mavericks.
Jahkobi Digital
Probé en Chrome 34 en Windows 7 y OS X Mavericks, ambos funcionan. bastante extraño si no funciona ¿eh? Tenga en cuenta que la carpeta no se puede descargar. Quizás puedas probar en una máquina diferente.
Cam Song
ok, ese método solo funcionará si tienes una extensión de Chrome. chrome.google.com/webstore/detail/github-mate/…
humazed
Desde esta vista, simplemente haga clic derecho y guárdelo como el archivo
Thierry Dalon
16

Puedes usar de curlesta manera:

curl -OL https://raw.githubusercontent.com/<username>/<repo-name>/<branch-name>/path/to/file

Osignifica que curl descarga el contenido
Lsignifica que curl sigue la redirección

marca
fuente
15

Esto ahora es posible en GitHub para cualquier archivo. Necesita traducir sus archivos para raw.github.com. Por ejemplo, si su archivo está en su repositorio en:

https://github.com/<username>/<repo>/some_directory/file.rb

Usando wget puedes tomar el archivo sin procesar de:

https://raw.github.com/<username>/<repo>/<branch>/some_directory/file.rb

Rails Composer es un gran ejemplo de esto.

Joe Leo
fuente
2
Algunos archivos están alojados en raw.githubusercontent.com
jcollum
1
y algunas veces es raw2.github.com solo para ti
jeremy.bass
11

Hay una extensión de Chrome llamada Enhanced Github

Agregará un botón de descarga directamente a la derecha de cada archivo.

ingrese la descripción de la imagen aquí

Abraham Murciano Benzadon
fuente
¡Esto es mejor que Github Mate únicamente porque no pide permiso para "Leer todo el historial de navegación"! Recuerde hacer clic derecho en el botón de descarga> Guardar enlace como.
Gh0sT
Es necesario agregar token desde la cuenta de su GitHub.
BartusZak
esto es seguro de usar?
Arian saputra
1
@Ariansaputra Lo he estado usando durante mucho tiempo, nunca encontré ningún problema. Debería ser seguro. No veo por qué no sería
Abraham Murciano Benzadon
@AbrahamMurcianoBenzadon gracias
Arian saputra
10

Para seguir con lo que dijo thomasfuchs, pero para los usuarios de GitHub Enterprise, esto es lo que puede usar.

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://your_domain/api/v3/repos/owner/repo/contents/path

También aquí está la documentación de la API https://developer.github.com/v3/repos/contents

Drew Michel
fuente
1
¿Puedes dar algunos ejemplos del camino? Si el repositorio es my-repo y el archivo que desea obtener está en x / y / z.txt, entonces la URL sería ... Gracias
Gray
1
@Grayhttps://your_domain/api/v3/repos/{owner}/my-repo/contents/x/y/z.txt
Gregory Suvalian
si quiero descargar un archivo de una sucursal? ¿Cómo puedo hacerlo?
Carlos Andres
@CarlosAndres usa el parámetro ref developer.github.com/v3/repos/contents/#parameters-1
Drew Michel
9

En caso de que quiera descargar un archivo zip de githubusarwget

wget -O filename.zip https://github.com/downloads/user/repository/filename.zip?raw=true

ver este sitio web para más detalles

DJJ
fuente
Puede descargar cualquier archivo, no solo .zip.
enriquetaso
6

Este método funciona para Windows ya que nunca he usado MAC, así que no sé cuáles son las teclas alternativas en MAC para las teclas que voy a mencionar a continuación.

Hablemos de los archivos CSV. SI desea descargar el archivo CSV:

  1. Vaya a ese conjunto de datos en particular que desea descargar y haga clic en él.
  2. Verá el botón "Sin formato" en la parte superior derecha del conjunto de datos.
  3. Presiona "Alt" y luego haz clic izquierdo en el botón "Sin procesar".
  4. Todo el CSV se descargará en su sistema.

Recuerde, debe presionar Alt y hacer clic izquierdo simultáneamente. Simplemente haciendo clic en el botón "Sin procesar" se abrirá el CSV en el navegador.

Espero que eso ayude.

saadi123
fuente
5

Debes hacerlo con la rawURL de tu archivo.

Por ejemplo, para descargar el archivo README de AFNetworking:

curl https://raw.githubusercontent.com/AFNetworking/AFNetworking/master/README.md > ADREADME.md 

Como es un repositorio público, no necesita ninguna credencial. Tenga en cuenta el tipo de URL:raw.githubusercontent.com/path/to/file

Kevin Delord
fuente
4

Resumen 2019

Hay una variedad de formas de manejar esto, dependiendo de qué tan grande sea el archivo, si necesita o no descargar carpetas además de los archivos, y si planea hacerlo manualmente o mediante programación.

Hay seis opciones resumidas a continuación. Y para aquellos que prefieren una explicación más práctica, he preparado un video de YouTube: descargue archivos y carpetas individuales de GitHub .

Además, publiqué una respuesta similar en StackOverflow para aquellos que necesitan descargar carpetas / directorios individuales de GitHub (en lugar de archivos).


1. Interfaz de usuario de GitHub

  • Hay un botón de descarga en la mayoría de las imágenes.
  • Hay un botón de descarga en la página de inicio del repositorio. Por supuesto, esto descarga el repositorio completo, después de lo cual necesitaría descomprimir la descarga y luego arrastrar manualmente los archivos específicos que necesita.

2. Menú contextual del navegador

  • Vaya al archivo en GitHub, haga clic derecho en el botón "Sin procesar" para abrir el menú contextual del navegador. Desde allí, si está utilizando Google Chrome, seleccione "Guardar enlace como ...". Otros navegadores tendrán una interfaz de usuario similar, pero la descripción de la selección puede variar. Por ejemplo, aparecerá como "Descargar archivo vinculado" y "Descargar archivo vinculado como" en Safari.

3. Herramientas de terceros

  • Hay una variedad de extensiones de navegador y aplicaciones web que pueden manejar esto, con DownGit como una de ellas. Simplemente pegue la URL de GitHub en el archivo y presione el botón "Descargar". Tenga en cuenta que el enlace debe ser la vista del repositorio alojado en GitHub.com, en lugar del enlace directo al archivo. Ejemplo de archivo de enlace: https://github.com/babel/babel-eslint/blob/master/lib/parse.js.

4. Subversion

  • GitHub no es compatible con git-archive (la función git que nos permitiría descargar archivos específicos). Sin embargo, GitHub admite una variedad de características de Subversion, una de las cuales podemos usar para este propósito. Subversion es un sistema de control de versiones (una alternativa a git). Necesitarás Subversion instalado. Tome la URL de GitHub para el archivo que desea descargar. Sin embargo, deberá modificar esta URL. Desea el enlace al repositorio, seguido de la palabra "tronco", y que termina con la ruta al archivo anidado. En otras palabras, usando el mismo enlace de archivo que mencioné anteriormente, reemplazaríamos "blob / master" con "trunk". Finalmente, abra una terminal, navegue hasta el directorio donde desea descargar el contenido, escriba el siguiente comando (reemplazando la URL con la URL que construyó):svn export https://github.com/babel/babel-eslint/trunk/lib/parse.js

5. cURL

  • Necesitarás cURL instalado. Vaya al archivo en GitHub.com, haga clic con el botón izquierdo en el botón "Sin procesar" para acceder al enlace directo del archivo, copie esta URL, abra una terminal, navegue hasta el directorio en el que desea descargar el contenido, escriba siguiente comando, reemplazando el nombre del archivo con lo que quieras darle un nombre, y la sustitución de la URL con la que acaba de copiar: curl -o parse.js https://raw.githubusercontent.com/babel/babel-eslint/master/lib/parse.js.

6. API de GitHub

  • Esto es en realidad lo que DownGit está usando debajo del capó. Usando la API REST de GitHub , realice una solicitud GET al punto final de contenido. El punto final puede ser construido como sigue: https://api.github.com/repos/:owner/:repo/contents/:path. Después de sustituir los marcadores de posición, un ejemplo de punto final es: https://api.github.com/repos/babel/babel-eslint/contents/lib/parse.js. Esto le proporciona datos JSON para ese archivo, incluida una URL de descarga (la misma URL de descarga que utilizamos en el ejemplo cURL anterior). Sin embargo, este método no es tan útil para un solo archivo (es más probable que lo use para descargar una carpeta específica, como se detalla en la respuesta a la que he vinculado anteriormente).
jabacchetta
fuente
Entiendo que los botones de descarga no descargan todo el repositorio ... podría estar equivocado. He aquí un ejemplo: github.com/googleapis/google-api-php-client si descarga el repositorio, no obtendrá el directorio de ejemplos; tienes que cambiar ramas para hacer eso.
Albert
1
@albert Buena captura. Eso es realmente porque excluyeron específicamente carpetas / archivos específicos en el archivo .gitattributes
jabacchetta
bien, gracias por compartir eso! TIL ...
Albert
4

Característica de lanzamientos de GitHub

En lugar de un enlace para descargar un archivo específico dentro del repositorio, debe usar las versiones de GitHub función de para asociar los datos descargables (como los binarios compilados) con la versión etiquetada del código fuente utilizado para generar esos datos.

https://github.com/blog/1547-release-your-software

Nos complace anunciar lanzamientos, un flujo de trabajo para enviar software a los usuarios finales. Las versiones son objetos de primera clase con registros de cambios y activos binarios que presentan un historial completo del proyecto más allá de los artefactos de Git.

Los lanzamientos van acompañados de notas de lanzamiento y enlaces para descargar el software o el código fuente.

Siguiendo las convenciones de muchos proyectos de Git, los lanzamientos están vinculados a las etiquetas de Git. Puede usar una etiqueta existente o dejar que los lanzamientos creen la etiqueta cuando se publique.

ingrese la descripción de la imagen aquí

pkamb
fuente
1
¡Si! ¡Esta es la solución más simple, factible directamente desde su navegador! 1. Desde la página principal de su repositorio, seleccione releases2. Haga clic en el número de confirmación. 3. Busque el archivo que desea, haga clic en los tres puntos ...y seleccione View file4. ¡Haga clic View rawpara descargar el archivo!
Jonathan Benn
3

Esto definitivamente funcionaría. Al menos en Chrome. Haga clic derecho en el icono "Sin procesar" -> Guardar enlace como .

Ankish Jain
fuente
1
Esto guarda el archivo HTML de la página github, que incluye el contenedor github alrededor del archivo.
Gregor Thomas el
@ Gregor - Para su información, no debería, al menos para las páginas que son TEXTO. En caso de duda, IZQUIERDA haga clic en el icono "Sin procesar". Esto debería abrir el archivo de texto en el navegador, SIN HTML. Ahora haga clic en cualquier lugar de la página y haga "Guardar como ...". (O seleccione Seleccionar todo / Copiar, luego pegue donde desee)
ToolmakerSteve
3

Para descargar un archivo desde un repositorio de Github, use el comando 'curl' con el enlace al archivo sin formato.

curl https://raw.githubusercontent.com/user/repo/filename --output filename

Agregue la opción --output seguido del nuevo nombre de archivo para descargar el archivo sin formato al archivo recién creado.

Jorge
fuente
2
  1. La página a la que enlazó responde a la primera pregunta.

  2. GitHub también tiene una instalación de descarga para cosas como lanzamientos.

  3. Google Code no tiene Git en absoluto.

  4. GitHub, Google Code y SourceForge , solo para comenzar, son hosting gratuito. SourceForge aún podría hacer CVS .

bmargulies
fuente
2

Hace poco encontré un servicio llamado gitzip y también es de código abierto:

sitio - http://kinolien.github.io/gitzip/

repo - https://github.com/KinoLien/gitzip

Visite el sitio anterior, ingrese el URL del repositorio o directorio, puede descargar archivos individuales o todo el directorio como un archivo zip.

avi
fuente
Pero, ¿cómo solo descargo jszip.min.jsde ese repositorio? troll face
Levi Fuller
abra el archivo en github y luego vaya a raw. Debería ver el código fuente del archivo y luego puede descargarlo usando el navegador con el botón derecho del mouse y guardar como. Esto funciona para mi.
Boris
2

Ahora es posible descargar cualquier archivo o cualquier carpeta en particular dentro del repositorio usando esta extensión de Google Chrome:

GitZip para github: enlace: https://chrome.google.com/webstore/detail/gitzip-for-github/ffabmkklhbepgcgfonabamgnfafbdlkn

Uso:

  1. En cualquier página de repositorios públicos de GitHub.
  2. Simplemente haga doble clic en los elementos que necesita.
  3. Haga clic en el botón de descarga en la parte inferior derecha.
  4. Vea el panel de progreso y espere la descarga del disparador del navegador.
  5. Obtenga el archivo ZIP.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Natesh Bhat
fuente
1

Si utiliza curl y firefox ... podría usar el complemento cliget que genera una llamada curl que incluye todos los mecanismos de autenticación (también conocidos como cookies).

Así que haga clic derecho en el rawbotón cliget -> "copiar url para enlace" y luego péguelo en un shell. Obtendrá su archivo incluso si tuvo que iniciar sesión para verlo.

estani
fuente
0
  1. En el lado derecho, justo debajo de "Clonar en el escritorio" dice "Descargar archivo Zip"
  2. Descargar archivo zip
  3. Extrae el archivo
Evan Gertis
fuente
¿Hay alguna manera de hacer esto de tal manera que tenga el contenido del archivo lfs?
Búho
0

O prueba esto

const https = require('https');
const fs = require('fs');
const DOMAIN = 'raw.githubusercontent.com';

function writeFile(data, fileName) {
  fs.appendFile(fileName, data.toString(), err => {
    if (err) {
      console.log('error in writing file', err);
    }
  });
}

function EOF(data) {
  console.log('EOF');
}

function getFileName(pathToFile) {
  var result = pathToFile.split('/');
  var splitLength = result.length;
  return result[splitLength - 1];
}
function getFile(branchName, username, repoName, ...pathToFile) {
  pathToFile.forEach(item => {
    const path = `/${username}/${repoName}/${branchName}/${item}`;
    const URL = `${DOMAIN}${path}`;
    const options = {
      hostname: DOMAIN,
      path: path
    };
    var fileName = getFileName(item);

    https
      .get(options, function(res) {
        console.log(res.statusCode);
        /* if file not found */
        if (res.statusCode === 404) {
          console.log('FILE NOT FOUND');
        } else {
          /* if file found */
          res.on('data', data => writeFile(data, fileName));
          res.on('end', data => EOF(data));
        }
      })
      .on('error', function(res) {
        console.log('error in reading URL');
      });
  });
}
getFile('master', 'bansalAyush', 'InstagramClone', '.babelrc', 'README.md');
Ayush Bansal
fuente
0

Utilicé el siguiente formato y creo que es importante informar sobre el camino.

https://github.com/user/repository/raw/branch/filename

^^^ lo anterior no está muy completo en mi mente

https://github.com/<user>/<repoROOTname>/blob/master/<path>/<filename>?raw=true

algunos dijeron raw.github.com o raw en lugar de blob, pero la segunda línea funciona para mí y espero que ayude a otros ...

2 ¢

rezwits
fuente
0

Puedes probar github-files-fetcher , es una herramienta de línea de comandos que descarga una sola carpeta o archivo desde un repositorio de GitHub.

Piense en un escenario real: estaba visitando la siguiente página web y quería descargar el asyncsubdirectorio solo.

https://github.com/reduxjs/redux/tree/master/examples

perdón por no poder publicar imágenes.

Con The github-files-fetcher, primero debe copiar la urlde esa página, que es https://github.com/reduxjs/redux/tree/master/examples/async , y luego ejecute el siguiente comando en la línea de comandos:

fetcher --url=https://github.com/reduxjs/redux/tree/master/examples/async

Gyumeijie
fuente
-2

Esto es lo que funcionó para mí en este momento ...

  1. Abra el archivo sin formato en una pestaña separada.

  2. Copie todo en su bloc de notas en un nuevo archivo.

  3. Guarde el archivo en la extensión que tenía originalmente

probado con un archivo php que descargué hace un momento (en el momento de la respuesta)

Aprendiz
fuente