Descargue una sola carpeta o directorio de un repositorio de GitHub

1106

¿Cómo puedo descargar solo una carpeta o directorio específico desde un repositorio Git remoto alojado en GitHub?

Digamos el ejemplo que el repositorio de GitHub vive aquí:

[email protected]:foobar/Test.git

Su estructura de directorios:

Test/
├── foo/ 
│   ├── a.py
│   └── b.py   
└── bar/
    ├── c.py
    └── d.py

Quiero descargar solo la carpeta foo y no clonar todo el proyecto de prueba.

g_inherit
fuente
44
Escribí un script de shell para esto usando svn checkout - github.com/Decad/github-downloader
Declan Cook el
391
¿Alguien puede explicarme por qué no hay una solución de interfaz web "oficial" para esto? Parece una característica trivial para implementar, pero muy útil.
Alexander - Restablece a Mónica
3
Desarrollé una extensión de Chrome usando el gitzip de KinoLien. github.com/charany1/GHSDD
charany1
3
see @janos answer svn alternativa es la mejor, sin autenticación, sin registro, sin límite, sin complementos
stackdave
55
Hice una solución ligera para esto ( download-directory.github.io ) y está integrada en GitHub refinado
fregante

Respuestas:

1038

Actualización de septiembre de 2016: existen algunas herramientas creadas por la comunidad que pueden hacer esto por usted:


Git no admite esto, pero Github lo hace a través de SVN. Si comprueba su código con subversion, Github esencialmente convertirá el repositorio de git a subversion en el backend, luego servirá el directorio solicitado.

Aquí le mostramos cómo puede usar esta función para descargar una carpeta específica. Usaré la popular biblioteca javascript lodashcomo ejemplo.

  1. Navegue a la carpeta que desea descargar . Vamos a descargar /testdesde la mastersucursal. Ejemplo de URL de repositorio de Github

  2. Modifique la URL para subversion . Reemplazar tree/mastercon trunk.

    https://github.com/lodash/lodash/tree/master/test

    https://github.com/lodash/lodash/trunk/test

  3. Descargar la carpeta . Vaya a la línea de comando y tome la carpeta con SVN.

svn checkout https://github.com/lodash/lodash/trunk/test

Es posible que no vea ninguna actividad de inmediato porque Github tarda hasta 30 segundos en convertir repositorios más grandes, así que tenga paciencia.

Explicación completa del formato de URL:

  • Si está interesado en la masterrama, use trunken su lugar. Entonces el camino completo estrunk/foldername
  • Si está interesado en la foorama, use branches/fooen su lugar. El camino completo parecebranches/foo/foldername
  • Protip: puede usar svn lspara ver las etiquetas y ramas disponibles antes de descargar si lo desea

¡Eso es todo! Github también admite más funciones de subversión , incluido el soporte para confirmar y empujar cambios.

mella
fuente
162
Impresionante, simplemente reemplace tree/mastercon trunky puede obtener la carpeta específica.
Sérgio Michels
66
Gracias @ user1146881 y @ SérgioMichels, tienes que reemplazar tree/mastercon trunk. Esta información debe agregarse en respuesta.
baptx
8
Modifiqué esto para usarlo svn export, ya que no quería una copia de trabajo de Subversion. Luego agregué la carpeta resultante en Git. (De alguna manera perdí una gran parte de mi árbol de directorios, así que
exporté
55
@ num3ric: perdón por la respuesta tardía, pero debería poder reemplazar "tronco" por "ramas / su rama"
nick
2
@ElijahLynn Gracias por la edición, ¡debería haber incluido esa información! Sin embargo, 2 cosas: acepté tu edición, pero revertí algunas de las mías (de todos modos, tenía la intención de hacer esto, me sentí demasiado desordenado). Además, cambié su branchcamino a branches, que creo que es correcto; si no, adelante y cámbielo de nuevo.
nick
568

Dos opciones para esta función:

Opción 1: extensión del navegador GitZip

Extensión de Chrome , complemento de Firefox

Uso:

  1. En cualquier página de repositorios de GitHub.
  2. Simplemente haga doble clic en la parte en blanco de 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.

Obtener token:

  1. Haga clic en el icono de extensión GitZip en su navegador.
  2. Haga clic en el enlace "Normal" o "Privado" además de "Obtener token".
  3. Autorice el permiso de GitZip en la página de autenticación de Github.
  4. Volver a la página del repositorio del comienzo.
  5. Continuar usando.

Opción 2: Github gh-page

http://kinolien.github.io/gitzip utilizando la API de GitHub y las bibliotecas JSZip, FileSaver.js.

Paso 1: ingrese la URL de Github en el campo en la parte superior derecha.
Paso 2: Presione enter o haga clic en descargar para descargar zip directamente o haga clic en buscar para ver la lista de subcarpetas y archivos.
Paso 3: Haz clic en el botón "Descargar archivo Zip" u "Obtener archivo" para obtener archivos.

En la mayoría de los casos, funciona bien, excepto que la carpeta contiene más de 1,000 archivos, debido a la limitación de la API de Github Trees. (se refiere a Github API # Contenidos )

Y también puede admitir repositorios privados / públicos y actualizar el límite de velocidad, si tiene una cuenta de GitHub y utiliza el enlace "get token" en este sitio.

Kino
fuente
55
Esto es increíble, pero parece que es tan increíble que la demanda lo empuja sobre su ratelimit y por lo tanto ya no funciona ;-) Sería genial poder iniciar sesión con GitHub oAuth, lo que permitiría soporte de repositorio privado y también aumentaría su límite de velocidad ya que serían solicitudes autenticadas
hobailey
3
@hobailey Ahora, puede obtener token de acceso para aumentar el límite de velocidad y también acceder a repositorios privados.
Kino
1
@MYounas Vea acerca de los capítulos de OAuth, Trees, Blobs en Github API Doc. y también use las bibliotecas JSZip, FileSaver.js js para la implementación de gitzip.
Kino
1
¿Alguien estaría interesado en una extensión de Chrome que haga esto?
goldylucks
44
Esto realmente debe agregarse al sitio web real de Github, es extremadamente útil.
llega el
508

Vaya a DownGit > Ingrese su URL> Descargar!

¡Ahora, puede DESCARGAR DIRECTAMENTE o crear ENLACE DE DESCARGA para cualquier directorio o archivo público de GitHub ( especialmente archivos grandes ) desde DownGit ! Aquí hay una demostración simple:


DownGit


También puede configurar la propiedad del archivo descargado: uso detallado .

Minhas Kamal
fuente
2
Hermano, me refiero a cómo crear un proyecto como DownGit que creaste.
Muhammad Younus
12
El método base es: 1. tomar el enlace del directorio ( ruta angular usada ), 2. ir a la API de GitHub , 3. buscar en el directorio y descargar todos los archivos, 4. crear un archivo zip con él (he usado jszip ) & guardarlo como archivo ( protector de archivos usado para esto). Para una comprensión clara, sugeriría echar un vistazo a mi proyecto .
Minhas Kamal
1
Gracias Bro por instrucciones detalladas, estoy muy agradecido si sugiere algún tutorial o enlace.
Muhammad Younus
55
Esto es bueno, pero no lo hace el trabajo con herramientas automatizadas (como wget)
Anillo
1
Esto se cuelga downloaded 25 of 25 filescuando intento descargar desde esta URL: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…
Wassadamo
164

Si es así svn, puede usar svn exportpara hacer esto:

svn export https://github.com/foobar/Test.git/trunk/foo

Observe el formato de URL:

  • La URL base es https://github.com/
  • /trunk agregado al final

Antes de ejecutar svn export, es bueno verificar primero el contenido del directorio con:

svn ls https://github.com/foobar/Test.git/trunk/foo
janos
fuente
¿Esto todavía funciona? Intenté esto con TortiseSVN y recibo un error de permiso, que me pide que proporcione las credenciales.
John
2
@john Estoy seguro de que es demasiado tarde para ser de mucha ayuda, pero ¿tiene habilitada la autenticación de 2 factores en su cuenta de GitHub? Si es así, creo que leí en alguna parte que tendrá que usar una clave pregenerada para la contraseña (que deberá encontrar en la configuración de GitHub).
nick
1
En cuanto al formato de URL, puede conservar la .gitextensión. Puede usar el enlace completo del proyecto, y comenzar usando svn lsseguido por la ruta completa del proyecto. Ejemplo: svn ls https://github.com/RobTillaart/Arduino.git. Para exportar solo una carpeta, simplemente agregue el /trunkseguido de la ruta deseada, como svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib. Es más fácil mantener intacta la ruta del proyecto.
jgrocha
@jgrocha No estoy seguro de que funcionó de esa manera en 2013, pero lo hace ahora, así que gracias, actualicé la publicación
janos
1
Un ejemplo: para descargar el contenido https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi, ejecutar svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi. Se wsgicreará un directorio llamado bajo el directorio de trabajo actual. Solo archivos fuente, nada más. No .git, no hay archivos relacionados con subversion.
Rockallite
74

Para un repositorio genérico de git:

Si desea descargar archivos, no clonar el repositorio con historial, puede hacerlo con git-archive.

git-archivecrea un archivo comprimido zip o tar de un repositorio git. Algunas cosas que lo hacen especial:

  1. Puede elegir qué archivos o directorios en el repositorio de git archivar.
  2. No archiva la .git/carpeta ni los archivos no rastreados en el repositorio en el que se ejecuta.
  3. Puede archivar una rama, etiqueta o confirmación específica. Los proyectos administrados con git a menudo usan esto para generar archivos de versiones del proyecto (beta, lanzamiento, 2.0, etc.) para que los usuarios los descarguen.

Un ejemplo de docs/usagecómo crear un archivo del directorio desde un repositorio remoto al que está conectado con ssh:

# in terminal
$ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tar

Más información en esta publicación de blog y la documentación de git .

Nota sobre GitHub Repos:

GitHub no permite el git-archiveacceso . ☹️

RobW
fuente
2
git archive --format tarel formato no es tar.gz, sino tar.
出 羽 和 之
Esta debería ser la mejor respuesta
Felipe Costa
2
Creo que esta es la mejor respuesta, pero tenga en cuenta que el comando git archive no funciona con el protocolo https.
bitfox
@yukihane editó la extensión de tar.gz a tar, con suerte OP estará a bordo con esto
mihai
36

He creado un proyecto de código abierto, llamado GitHubFolderDownloader . Le permite descargar una sola carpeta de un repositorio sin clonar o descargar todo el repositorio.

VahidN
fuente
Funciona muy bien si solo necesita descargar carpetas de GitHub. Solo necesita un token de Github para descargar la carpeta deseada. Más votos a favor podrían darle importancia a esta respuesta.
Alex Essilfie
34

No hay nada malo con otras respuestas, pero pensé en compartir las instrucciones paso a paso para aquellos que deambulan por este proceso por primera vez.

Cómo descargar una sola carpeta desde un repositorio de github (Mac OS X):

~ Para abrir Terminal, simplemente haga clic en Spotlight y escriba terminal, luego presione enter

  1. En una Mac, es probable que ya tenga SVN (para probar simplemente abra la terminal y escriba "svn" o "which svn" ~ sin las comillas)
  2. En Github: busque la ruta de Github a su carpeta git (no el repositorio) haciendo clic en el nombre de la carpeta específica dentro de un repositorio
  3. Copie la ruta desde la barra de direcciones del navegador
  4. Abra la Terminal y escriba: svn export
  5. A continuación, pegue la dirección (p. Ej.): Https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. Reemplace las palabras: árbol / maestro
  7. con la palabra: baúl
  8. Escriba la carpeta de destino para los archivos (en este ejemplo, almaceno la carpeta de destino dentro de la carpeta de Descargas para el usuario actual)
  9. Aquí el espacio es solo la barra espaciadora, no la palabra (espacio) ~ / Descargas / HeadsUpUI
  10. El comando final del terminal muestra el comando completo para descargar la carpeta (compare la dirección con el paso 5) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI

Por cierto, si está en Windows u otra plataforma, puede encontrar una descarga binaria de subversion (svn) en http://subversion.apache.org

~ Si desea pagar la carpeta en lugar de simplemente descargarla, intente usar la ayuda de svn (tldr: reemplace exportar con pago )

Actualizar

Con respecto al comentario sobre la reanudación de una descarga / pago interrumpido. Intentaría correr svn cleanupseguido de svn update. Busque SO para obtener opciones adicionales.

Tommie C.
fuente
1
Tengo que descargar muchos archivos de una carpeta específica y obtuve este error en el medio de la descarga: svn: E175002: REPORT of '/ bgmartins / scripts-parlamento /! Svn / vcc / default': 200 OK ( github.com ) ¿Cómo puedo reanudar la descarga?
Miguel
Trabajó para mi. Eso es increíble.
Heath Raftery
24

Quienquiera que esté trabajando en una carpeta específica necesita clonar esa carpeta en particular, para hacerlo, siga los pasos a continuación mediante el uso de pago escaso.

  1. Crea un directorio.

  2. Inicializar un repositorio de Git. ( git init)

  3. Habilitar pagos escasos. ( git config core.sparsecheckout true)

  4. Dígale a Git qué directorios desea (echo 2015 / brand / May (consulte la carpeta en la que desea trabajar) >> .git/info/sparse-checkout)

  5. Agregar el control remoto ( git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git)

  6. Obtener los archivos ( git pull origin master)

Mohammed Jafar
fuente
Lástima que este comentario no haya recibido suficientes votos positivos. Parece que la solución proporcionada se aplica a todos los repositorios git y no solo al github.
Kalyan
99
Sin embargo, esto en realidad no hace lo que se deseaba. Todavía clona todo el repositorio, simplemente no revisa algunas carpetas.
Chris
Me sale este error: el pago escaso no deja ninguna entrada en el directorio de trabajo.
orangecaterpillar
20

No se puede; A diferencia de Subversion, donde cada subdirectorio puede extraerse individualmente, Git opera en un repositorio completo.

Para proyectos donde es necesario un acceso más preciso, puede usar submódulos: cada submódulo es un proyecto Git separado y, por lo tanto, puede clonarse individualmente.

Es concebible que un front-end de Git (por ejemplo, la interfaz web de GitHub, o gitweb) pueda optar por proporcionar una interfaz para que extraiga una carpeta determinada, pero que yo sepa ninguno de ellos hace eso (aunque le permiten descargar archivos individuales) , por lo que si la carpeta no contiene demasiados archivos, esa es una opción)

Editar : GitHub realmente ofrece acceso a través de SVN, lo que le permitiría hacer exactamente esto (según el comentario). Consulte https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away para obtener las últimas instrucciones sobre cómo hacerlo.

michel-slm
fuente
¿hay algo a través de github API?
g_inherit
14

Si realmente solo desea "descargar" la carpeta y no "clonarla" (para el desarrollo), la forma más sencilla de obtener una copia de la versión más reciente del repositorio (y, por lo tanto, una carpeta / archivo dentro de ella), sin necesidad de clonar todo el repositorio o incluso instalar git en primer lugar, es descargar un archivo zip (para cualquier repositorio, fork, branch, commit, etc.) yendo al repositorio / fork / branch / commit deseado en GitHub (por ejemplo, http(s)://github.com/<user>/<repo>/commit/<Sha1>para una copia de los archivos tal como estaban después de una confirmación específica) y seleccionando el Downloadsbotón cerca de la esquina superior derecha.

Este formato de archivo no contiene nada de la magia de git-repo, solo los archivos rastreados (y tal vez algunos archivos .gitignore si se rastrearon, pero puede ignorarlos: p), eso significa que si el código cambia y desea manténgase en la cima, tendrá que volver a descargarlo manualmente, y también significa que no podrá usarlo como un repositorio git ...

No estoy seguro de si eso es lo que está buscando en este caso (de nuevo, "descargar" / ver frente a "clonar" / desarrollar), pero de todos modos puede ser útil ...

johnny
fuente
99
Si no ve un enlace de descarga, asegúrese de estar en una página principal de repositorio (no un directorio secundario). Parece que solo puede descargar un archivo zip de todo el repositorio. Además, esta página de ayuda de Github puede ser útil.
JD Smith
2
Fácil acceso de apuntar y hacer clic. Fácil de obtener una versión previa. Fácil sacar la carpeta deseada del zip descargado. Gracias.
Andy Thomas
1
La URL genérica para descargar en tar.gz:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian
11

Resumen 2019

Hay una variedad de formas de manejar esto, dependiendo de si desea hacerlo manualmente o mediante programación.

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

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


1. Interfaz de usuario de GitHub

  • Hay un botón de descarga en la página de inicio del repositorio. Por supuesto, esto descarga todo el repositorio, después de lo cual necesitaría descomprimir la descarga y luego arrastrar manualmente la carpeta específica que necesita.

2. 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 la carpeta (por ejemplo https://github.com/babel/babel-eslint/tree/master/lib) y presione el botón "Descargar".

3. Subversion

  • GitHub no es compatible con git-archive (la función git que nos permitiría descargar carpetas específicas). 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 la carpeta 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 a la carpeta anidada. En otras palabras, usando el mismo ejemplo de enlace de carpeta que mencioné anteriormente, reemplazaríamos "árbol / maestro" con "tronco". 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, y presiona enter.

4. API de GitHub

  • Esta es la solución que necesitará si desea realizar esta tarea mediante programación. Y esto es en realidad lo que DownGit está usando debajo del capó. Usando la API REST de GitHub , escriba una secuencia de comandos que haga 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 reemplazar los marcadores de posición, un punto final de ejemplo es:https://api.github.com/repos/babel/babel-eslint/contents/lib. Esto le proporciona datos JSON para todo el contenido que existe en esa carpeta. Los datos tienen todo lo que necesita, incluso si el contenido es o no una carpeta o un archivo, una URL de descarga si es un archivo y un punto final de la API si es una carpeta (para que pueda obtener los datos de esa carpeta). Utilizando estos datos, el script puede recorrer recursivamente todo el contenido de la carpeta de destino, crear carpetas para carpetas anidadas y descargar todos los archivos para cada carpeta. Mira el código de DownGit para inspirarte.
jabacchetta
fuente
9

Otro ejemplo específico:

Como si quisiera descargar la carpeta 'iOS Pro Geo' de la url

https://github.com/alokc83/APRESS-Books-Source-Code-/ tree / master /% 20Pro% 20iOS% 20Geo

y puedo hacerlo a través de

svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

Nota tronco en el camino

Editado: (según el comentario de Tommie C)

Sí, usar exportar en lugar de pagar daría una copia limpia sin archivos de repositorio git adicionales.

svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

Editado: si el árbol / maestro no está allí en la URL, bifurca y estará allí en la URL bifurcada.

zeeawan
fuente
2
Solo necesita cambiar el pago para exportar si solo desea descargar una copia de la carpeta en lugar de pagar.
Tommie C.
Gracias por su respuesta, ¿podemos bucear en una sucursal? digamos que quiero descargar la carpeta aaa de la sucursal
feature1
7

Hay un paquete de pip Python3 llamado githubdlque puede hacer esto *:

export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo

La página del proyecto está aquí.

* Descargo de responsabilidad: escribí este paquete.

Willem van Ketwich
fuente
6

Es uno de los pocos lugares donde SVN es mejor que Git.

Al final hemos gravitado hacia tres opciones:

  1. Use wget para tomar los datos de GitHub (usando la vista de archivo sin formato).
  2. Haga que los proyectos aguas arriba publiquen el subconjunto de datos requerido como artefactos de compilación.
  3. Ríndete y usa el pago completo. Es un gran éxito en la primera compilación, pero a menos que obtenga mucho tráfico, no es demasiado complicado en las siguientes compilaciones.
Shrivastava Manish
fuente
44
Bueno, es menos Git vs Subversion y más que GitHub no permite git-archive. (Me encantaría saber por qué.)
Rob Howard
6

Si se siente cómodo con los comandos de Unix, no necesita dependencias especiales o aplicaciones web para esto. Puede descargar el repositorio como tarball y descomprimir solo lo que necesita.

Ejemplo (archivos woff2 de un subdirectorio en fontawesome):

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • Más información sobre el formato de enlace: https://developer.github.com/v3/repos/contents/#get-archive-link (incluido cómo obtener un archivo zip o ramas / referencias específicas)
  • Mantenga la parte inicial de la ruta ( */) para que coincida con cualquier directorio. Github crea un directorio contenedor con la referencia de confirmación en el nombre, por lo que no se puede conocer.
  • Probablemente quiera --strip-componentsser igual a la cantidad de barras ( /) en la ruta (argumento anterior).

Esto descargará todo el tarball. Use el método SVN mencionado en las otras respuestas si esto debe evitarse o si desea ser amable con los servidores de GitHub.

Albin
fuente
5

Puede hacer una descarga simple del árbol de directorios:

git archive --remote [email protected]:foobar/Test.git HEAD:foo | tar xf -

Pero si quiere comprobarlo y poder hacer commits y hacerlos retroceder, no, no puede hacerlo.

araqnid
fuente
1
Comando no válido: 'git-upload-archive' foobar / Test.git '' Parece que estás usando ssh para clonar un git: // URL. Asegúrese de que su opción de configuración core.gitProxy y la variable de entorno GIT_PROXY_COMMAND NO estén establecidas. fatal: El extremo remoto colgó inesperadamente tar: Esto no se ve como un alquitrán archivo tar: Salir con estado de fallo debido a errores anteriores
g_inherit
@g_inherit Puedo reproducir este problema. Aunque esta podría ser la dirección correcta, esta respuesta no es válida.
Uli Köhler
a pesar de tantos votos negativos, este es el único consejo que me funcionó.
bhaskarc
5

Solo para amplificar las respuestas anteriores, un ejemplo real de un repositorio real de GitHub a un directorio local sería:

svn ls https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces

svn export https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces  /temp/SvnExport/Washburn

A veces, un ejemplo concreto ayuda a aclarar las sustituciones propuestas.

John Washburn
fuente
5

Ninguna de las respuestas ayudó en mi situación. Si está desarrollando para Windows, es probable que no tenga svn. En muchas situaciones, uno no puede contar con que los usuarios tengan instalado Git, o no desea descargar repositorios completos por otras razones. Algunas de las personas que respondieron a esta pregunta, como Willem van Ketwich y aztack, crearon herramientas para realizar esta tarea. Sin embargo, si la herramienta no está escrita para el idioma que está utilizando, o si no desea instalar una biblioteca de terceros, no funcionará.

Sin embargo, hay una manera mucho más fácil. GitHub tiene una API que le permite descargar un solo archivo o el contenido de un directorio completo mediante solicitudes GET . Puede acceder a un directorio utilizando https://api.github.com/repos/:owner/:repo_name/contents/:pathque devuelve un objeto JSON que enumera todos los archivos en el directorio. En la enumeración se incluye un enlace al contenido sin formato del archivo, el download_urlparámetro. El archivo se puede descargar usando esa URL.

Es un proceso de dos pasos que requiere la capacidad de realizar solicitudes GET, pero esto se puede implementar en prácticamente cualquier idioma, en cualquier plataforma. Se puede usar para obtener archivos o directorios.

Calvin
fuente
4

Yo uso Linux, así que pon esto en ~ / .bashrc, llamado incluso: D $ HOME / .bashrc

git-dowloadfolder(){
a="$1"
svn checkout ${a/tree\/master/trunk}

}

luego actualice la cáscara con

source ~/.bashrc 

luego úsalo con git-downloadfolder blablabla: D

usuario1088530
fuente
3

Trabajo con servidores CentOS 7 en los que no tengo acceso root, ni git, svn, etc. (¡ni quiero hacerlo!), Así que hice un script de Python para descargar cualquier carpeta de github: https://github.com/andrrrl/github -cargador-descargador

El uso es simple, solo copie la parte relevante de un proyecto github, digamos que el proyecto es https://github.com/MaxCDN/php-maxcdn/ , y desea una carpeta donde solo estén algunos archivos fuente, entonces necesita hacer algo como:

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(creará la carpeta de destino si no existe)

Requiere la biblioteca lxml , se puede instalar con easy_install lxml
Si no tiene acceso de root (como yo), puede crear un .pydistutils.pyarchivo en su $HOMEdirectorio con estos contenidos: [install] user=1 Y easy_install lxmlsimplemente funcionará (ref: https://stackoverflow.com/a/ 33464597/591257 ).

aesede
fuente
3

Solo 5 pasos para ir

1) Descargue SVN desde aquí .
2) Abra CMD y vaya al directorio bin SVN como a continuación:

cd %ProgramFiles%\SlikSvn\bin

3) Supongamos que quiero descargar la URL de este directorio 4) Ahora reemplace con 5) Ahora active este último comando para descargar la carpeta en el mismo directorio.
https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples

tree/develop
or
tree/master
trunk

svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples

Muhammad Ali
fuente
Esto no parece funcionar para
repositorios
Sí, no funcionará para respos privados, se recomienda GIT para descargar respo privados.
Muhammad Ali
2

Para exportar un directorio desde GitHub, reemplace "/ tree / master /" en la url del directorio con "/ trunk /".

Por ejemplo, para exportar el directorio desde la siguiente URL:

https://github.com/liferay/liferay-plugins/tree/master/portlets/sample-hibernate-portlet

ejecuta el siguiente comando:

svn export https://github.com/liferay/liferay-plugins/trunk/portlets/sample-hibernate-portlet
Mohsen Abasi
fuente
2

Una respuesta directa a esto es primero tortuga svn desde el siguiente enlace.

https://tortoisesvn.net/downloads.html

mientras la instalación activa la opción CLI, para que pueda usarse desde la interfaz de línea de comandos.

copie el enlace del subdirectorio git hub.

Ejemplo

https://github.com/tensorflow/models/tree/master/research/deeplab

reemplazar árbol / maestro con tronco

https://github.com/tensorflow/models/trunk/research/deeplab

y hacer

svn checkout https://github.com/tensorflow/models/trunk/research/deeplab

los archivos se descargarán a la carpeta deeplab en el directorio actual.

Kan
fuente
2

puedes usar git svn de la siguiente manera.

git svn clone https://github.com/lodash/lodash/trunk/test

De esta forma, no tiene que pasar por el dolor de configurar svn, específicamente para usuarios de Windows.

V3K3R
fuente
Gracias. Puedo garantizar que funciona para Windows. Sin embargo, no funciona en gcloud. Dice git: 'svn' no es un comando
JOSEPH Blessingh
sudo apt install git-svnes obligatorio cuando se ejecuta a través de WSL.
Jammy Dodger
1

Utilice esta función, el primer argumento es la url de la carpeta, el segundo es el lugar donde se descargará la carpeta:

function github-dir() {
    svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"  
}
Cara feliz
fuente
1

git clone --filter de Git 2.19

Esta opción realmente omitirá la búsqueda de objetos innecesarios del servidor:

git clone --depth 1 --no-checkout --filter=blob:none \
  "file://$(pwd)/server_repo" local_repo
cd local_repo
git checkout master -- mydir/

El servidor debe configurarse con:

git config --local uploadpack.allowfilter 1
git config --local uploadpack.allowanysha1inwant 1

Se realizó una extensión al protocolo remoto Git para admitir esta característica en v2.19.0, pero no hay soporte de servidor en ese momento. Pero ya se puede probar localmente.

He cubierto esto con más detalle en: ¿Cómo clono un subdirectorio solo de un repositorio Git?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fuente
1
Interesante y votado. Supongo que debo haber mencionado esta característica 2.19 en otra parte.
VonC
@VonC Creo que te gané esta vez: stackoverflow.com/questions/2466735/... ¡ y solo lo miré después del lanzamiento XD! Por supuesto, estaba buscando en Google hoy un poco después del lanzamiento de 2.22, todas las respuestas ya se han actualizado, por supuesto ;-) Nunca deja de divertirme porque siempre queda otro semi duplicado, siempre, y termino encontrándolo un año después con Una consulta ligeramente diferente. Sin embargo, no tengo la intención de golpearte en git, demasiado duro, ¡pero vigila los recuentos de nigromante! jaja
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Bueno, sigan con el buen trabajo: toda la comunidad se beneficiará de esta pequeña competencia paralela (y voté su otra respuesta en ese momento)
VonC
@VonC bromeando, por supuesto, obviamente también voté por tus cosas. Solo necesito encontrar una manera de canjear esos puntos en dinero ahora XD
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1

Por alguna razón, la svnsolución no funciona para mí, y dado que no necesito svnnada más, no tenía sentido perder el tiempo tratando de lograrlo, así que busqué una solución simple usando las herramientas que ya tenía. Este script usa solo curly awkpara descargar todos los archivos en un directorio de GitHub descrito como"/:user:repo/contents/:path" .

El cuerpo devuelto de una llamada al "GET /repos/:user:repo/contents/:path"comando API REST de GitHub devuelve un objeto que incluye un"download_url" enlace para cada archivo en un directorio.

Este script de línea de comandos llama a la API REST usando curly envía el resultado a través de AWK, que filtra todas las líneas excepto "download_url", borra comillas y comas de los enlaces, y luego descarga los enlaces usando otra llamada para curl.

curl -s https://api.github.com/repos/:user/:repo/contents/:path | awk \
     '/download_url/ { gsub("\"|,", "", $2); system("curl -O "$2"); }'
Piña
fuente
1

git sparse-checkout

Git 2.25.0 incluye un nuevo git sparse-checkoutcomando experimental que hace que la función existente sea más fácil de usar, junto con algunos beneficios de rendimiento importantes para repositorios grandes. ( El blog de GitHub )

Ejemplo con versión actual :

git clone --filter=blob:none --sparse https://github.com/git/git.git
cd git
git sparse-checkout init --cone
git sparse-checkout add t

Más destacado

  • --sparsecomprueba solo los archivos de directorio de nivel superior del gitrepositorio en la copia de trabajo
  • git sparse-checkout add tagrega / retira incrementalmente la tsubcarpeta degit

Otros elementos

  • git sparse-checkout init hace algunos preparativos para habilitar pagos parciales
  • --filter=blob:noneoptimiza la obtención de datos descargando solo los objetos git necesarios (consulte la función de clonación parcial para obtener más información)
  • --cone también acelera el rendimiento al aplicar patrones de inclusión de archivos más restringidos

Estado de GitHub

GitHub todavía está evaluando esta característica internamente mientras está habilitada en unos pocos repositorios seleccionados [...]. A medida que la característica se estabilice y madure, lo mantendremos actualizado con su progreso. ( documentos )

ford04
fuente
Votado Presente ese comando en stackoverflow.com/a/59515426/6309 , con el conjunto de patrones de clonación.
VonC