Por ejemplo, quiero descargar PCL 3d_rec_framework.
Este es el repositorio git de PCL: https://github.com/PointCloudLibrary/pcl.git
¿Cómo descargar este directorio?
https://github.com/PointCloudLibrary/pcl/tree/master/apps
He intentado correr pero no funciona:
sam@sam:~/code/pcl_standalone$ git clone https://github.com/PointCloudLibrary/pcl/tree/master/apps/3d_rec_framework
Cloning into '3d_rec_framework'...
error: The requested URL returned error: 403 while accessing https://github.com/PointCloudLibrary/pcl/tree/master/apps/3d_rec_framework/info/refs
fatal: HTTP request failed
sam@sam:~/code/pcl_standalone$
¿Cómo descargarlo?
Por cierto, no quiero descargar git de PCL y eliminar todos los demás directorios que no quiero. Por eso hago esta pregunta.
Gracias ~
La respuesta de dobey ya no es el caso desde git v1.7. Ahora puede retirar ciertas carpetas de un repositorio. Las instrucciones completas se encuentran aquí .
Esto le dice a git qué directorios desea pagar. Entonces puedes extraer solo esos directorios
fuente
Primero, haz:
Luego:
...Y por último:
Es fácil. Git reescribirá el repositorio para que solo se incluya el subdirectorio deseado. Esto funciona incluso si el subdirectorio tiene varias capas de profundidad. Simplemente asigne al directorio de destino el nombre del subdirectorio. Luego, en el comando "git filter-branch", coloque la ruta relativa al subdirectorio. Oh,
--depth 1
le dicegit
que solo descargue la parte superior de la cabeza ( esencialmente eliminando el historial ).fuente
git clone --filter
de Git 2.19Esta opción realmente omitirá la búsqueda de la mayoría de los objetos innecesarios del servidor:
El servidor debe configurarse con:
No hay soporte de servidor a partir de v2.19.0, pero ya se puede probar localmente.
TODO:
--filter=blob:none
omite todos los blobs, pero aún recupera todos los objetos del árbol. Pero en un repositorio normal, esto debería ser pequeño en comparación con los archivos en sí, por lo que esto ya es lo suficientemente bueno. Preguntado en: https://www.spinics.net/lists/git/msg342006.html Los desarrolladores respondieron que se--filter=tree:0
está trabajando para hacerlo.Recuerde que eso
--depth 1
ya implica--single-branch
, vea también: /programming/1778088/how-to-clone-a-single-branch-in-gitfile://$(path)
es necesario para superar lasgit clone
travesuras de protocolo: /programming/47307578/how-to-shallow-clone-a-local-git-repository-with-a-relative-pathEl formato de
--filter
está documentado enman git-rev-list
.Se realizó una extensión al protocolo remoto Git para admitir esta función.
Documentos en el árbol de Git:
Ver también: /programming/2466735/how-to-checkout-only-one-file-from-git-repository-sparse-checkout
Pruébalo
GitHub aguas arriba .
Salida en Git v2.19.0:
Conclusiones:
d1/a
faltan todos los blobs excepto . Por ejemplof70a17f51b7b30fec48a32e4f19ac15e261fd1a4
, qued1/b
no está allí después de salird1/
.Tenga en cuenta que
root/root
ymybranch/mybranch
también faltan, pero lo--depth 1
oculta de la lista de archivos faltantes. Si elimina--depth 1
, se muestran en la lista de archivos faltantes.fuente
Para repositorios de GitHub, puede clonar cualquier subdirectorio de cualquier repositorio de GitHub (en cualquier referencia) usando https://github.com/HR/github-clone
fuente