¿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.
Respuestas:
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
lodash
como ejemplo.Navegue a la carpeta que desea descargar . Vamos a descargar
/test
desde lamaster
sucursal.Modifique la URL para subversion . Reemplazar
tree/master
contrunk
.https://github.com/lodash/lodash/tree/master/test
➜https://github.com/lodash/lodash/trunk/test
Descargar la carpeta . Vaya a la línea de comando y tome la carpeta con SVN.
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.
¡Eso es todo! Github también admite más funciones de subversión , incluido el soporte para confirmar y empujar cambios.
fuente
tree/master
contrunk
y puede obtener la carpeta específica.tree/master
contrunk
. Esta información debe agregarse en respuesta.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í quebranch
camino abranches
, que creo que es correcto; si no, adelante y cámbielo de nuevo.Dos opciones para esta función:
Opción 1: extensión del navegador GitZip
Uso:
Obtener token:
Opción 2: Github gh-page
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.
fuente
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:
También puede configurar la propiedad del archivo descargado: uso detallado .
fuente
downloaded 25 of 25 files
cuando intento descargar desde esta URL: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…Si es así
svn
, puede usarsvn export
para hacer esto:Observe el formato de URL:
https://github.com/
/trunk
agregado al finalAntes de ejecutar
svn export
, es bueno verificar primero el contenido del directorio con:fuente
.git
extensión. Puede usar el enlace completo del proyecto, y comenzar usandosvn ls
seguido por la ruta completa del proyecto. Ejemplo:svn ls https://github.com/RobTillaart/Arduino.git
. Para exportar solo una carpeta, simplemente agregue el/trunk
seguido de la ruta deseada, comosvn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib
. Es más fácil mantener intacta la ruta del proyecto.https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi
, ejecutarsvn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi
. Sewsgi
creará un directorio llamado bajo el directorio de trabajo actual. Solo archivos fuente, nada más. No.git
, no hay archivos relacionados con subversion.Para un repositorio genérico de git:
Si desea descargar archivos, no clonar el repositorio con historial, puede hacerlo con
git-archive
.git-archive
crea un archivo comprimido zip o tar de un repositorio git. Algunas cosas que lo hacen especial:.git/
carpeta ni los archivos no rastreados en el repositorio en el que se ejecuta.Un ejemplo de
docs/usage
cómo crear un archivo del directorio desde un repositorio remoto al que está conectado con ssh: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-archive
acceso . ☹️fuente
git archive --format tar
el formato no es tar.gz, sino tar.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.
fuente
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):
Por cierto, si está en Windows u otra plataforma, puede encontrar una descarga binaria de subversion (svn) en http://subversion.apache.org
Actualizar
Con respecto al comentario sobre la reanudación de una descarga / pago interrumpido. Intentaría correr
svn cleanup
seguido desvn update
. Busque SO para obtener opciones adicionales.fuente
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.
Crea un directorio.
Inicializar un repositorio de Git. (
git init
)Habilitar pagos escasos. (
git config core.sparsecheckout true
)Dígale a Git qué directorios desea (echo 2015 / brand / May (consulte la carpeta en la que desea trabajar) >>
.git/info/sparse-checkout
)Agregar el control remoto (
git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git
)Obtener los archivos (
git pull origin master
)fuente
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.
fuente
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 elDownloads
botó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 ...
fuente
tar.gz
:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
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
2. Herramientas de terceros
https://github.com/babel/babel-eslint/tree/master/lib
) y presione el botón "Descargar".3. Subversion
svn export https://github.com/babel/babel-eslint/trunk/lib
, y presiona enter.4. API de GitHub
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.fuente
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
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.
Editado: si el árbol / maestro no está allí en la URL, bifurca y estará allí en la URL bifurcada.
fuente
Hay un paquete de pip Python3 llamado
githubdl
que puede hacer esto *:La página del proyecto está aquí.
* Descargo de responsabilidad: escribí este paquete.
fuente
Es uno de los pocos lugares donde SVN es mejor que Git.
Al final hemos gravitado hacia tres opciones:
fuente
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):
*/
) 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.--strip-components
ser 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.
fuente
Puede hacer una descarga simple del árbol de directorios:
Pero si quiere comprobarlo y poder hacer commits y hacerlos retroceder, no, no puede hacerlo.
fuente
Solo para amplificar las respuestas anteriores, un ejemplo real de un repositorio real de GitHub a un directorio local sería:
A veces, un ejemplo concreto ayuda a aclarar las sustituciones propuestas.
fuente
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/:path
que 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, eldownload_url
pará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.
fuente
Nuestro equipo escribió un script bash para hacer esto porque no queríamos tener que instalar SVN en nuestro servidor básico.
https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh
Utiliza la API de github y se puede ejecutar desde la línea de comandos de esta manera:
fuente
Yo uso Linux, así que pon esto en ~ / .bashrc, llamado incluso: D $ HOME / .bashrc
luego actualice la cáscara con
luego úsalo con git-downloadfolder blablabla: D
fuente
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.py
archivo en su$HOME
directorio con estos contenidos:[install] user=1
Yeasy_install lxml
simplemente funcionará (ref: https://stackoverflow.com/a/ 33464597/591257 ).fuente
Solo 5 pasos para ir
fuente
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:
ejecuta el siguiente comando:
fuente
Una respuesta directa a esto es primero tortuga svn desde el siguiente enlace.
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.
reemplazar árbol / maestro con tronco
y hacer
los archivos se descargarán a la carpeta deeplab en el directorio actual.
fuente
puedes usar git svn de la siguiente manera.
De esta forma, no tiene que pasar por el dolor de configurar svn, específicamente para usuarios de Windows.
fuente
sudo apt install git-svn
es obligatorio cuando se ejecuta a través de WSL.Si necesita hacerlo programáticamente y no quiere confiar en SVN, puede usar la API de GitHub para descargar todo el contenido de forma recursiva.
Para inspiración, aquí está mi esencia de rubí: https://gist.github.com/cvengros/b2a7e82f66519d423b6f
fuente
Utilice esta función, el primer argumento es la url de la carpeta, el segundo es el lugar donde se descargará la carpeta:
fuente
git clone --filter
de Git 2.19Esta opción realmente omitirá la búsqueda de objetos innecesarios del servidor:
El servidor debe configurarse con:
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?
fuente
Por alguna razón, la
svn
solución no funciona para mí, y dado que no necesitosvn
nada 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 solocurl
yawk
para 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
curl
y 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.fuente
git sparse-checkout
Ejemplo con versión actual :
Más destacado
--sparse
comprueba solo los archivos de directorio de nivel superior delgit
repositorio en la copia de trabajogit sparse-checkout add t
agrega / retira incrementalmente lat
subcarpeta degit
Otros elementos
git sparse-checkout init
hace algunos preparativos para habilitar pagos parciales--filter=blob:none
optimiza 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 restringidosEstado de GitHub
fuente