¿Cómo puedo download solo las partes necesarias de un proyecto remoto en Git?

Si está trabajando en un repository remoto grande y desea restringir la descarga a las pocas twigs en las que está trabajando, ¿cómo se configura el command git-clone, suponiendo que es el command correcto en este caso?

Si está trabajando en dos twigs en dos directorys separados, puede configurar uno para que sea un clon del otro:

git clone http://remote/repo.git branch-a git clone branch-a branch-b 

Luego, arregle el control remoto de origin en branch-b :

 cd branch-b git remote add origin http://remote/repo.git 

(puede que tenga que eliminar el origin anterior primero). De esta forma, la información del repository local será compartida por enlaces duros entre los dos directorys, lo que le ahorrará espacio en comparación con la creación de dos clones separados del control remoto.

O bien, ve a comprar un disco de 1 TB, son baratos.

Responde a la pregunta real

Por lo general, los clones locales con git no ocupan mucho espacio adicional, ya que git usará enlaces físicos para compartir los files del object. Esto es difícil de notar: si ejecuta du en cada repository, obtendrá el tamaño completo, pero si lo ejecuta en los dos juntos, debería ver los ahorros. Asumiré que ya has decidido por algún motivo que esto no es lo suficientemente bueno. Tal vez estás en un sistema de files que no admite enlaces duros, o los clones están en unidades separadas o algo … quién sabe.

En cualquier caso, si estás buscando crear un clon liviano, ahorrando espacio, ¿por qué no save todo el espacio? Hay un script precioso en el directory contrib de git-new-workdir llamado git-new-workdir (el enlace es a la versión actual en git.git). Crea un nuevo directory de trabajo a partir de un repository, con el directory .git esencialmente todo compartido a través de enlaces simbólicos: prácticamente lo único que no es HEAD . Suelta el script en algún lugar de tu path y podrás ejecutarlo como un command git normal:

 git new-workdir <original-repo> <new-workdir-path> 

Voila! Ahora tiene dos treees de trabajo, con un directory .git compartido, por lo que el único espacio adicional que está ocupando son los files del tree de trabajo. ¡No hay forma de evitar eso si quieres poder trabajar!

Lo único que debe tener cuidado es revisar la misma twig en ambos repositorys. Si luego se compromete con esa twig en un repository, el otro se desincronizará; el tree de trabajo y el índice no coincidirán con la confirmación en la que se encuentra la sucursal. ¡De lo contrario, puedes trabajar felizmente en ambos repositorys!

Respuesta original

Permítanme, en primer lugar, decirles que esencialmente no hay ninguna posibilidad de que quieran hacer esto. Lo digo en serio. Apenas le ahorrará espacio en disco, mientras que los depósitos con objects vinculados (que es lo pnetworkingeterminado, ¡ni siquiera tiene que hacer nada para conseguirlo!) Le ahorrarán una tonelada.

Prácticamente en todos los casos, las sucursales comparten la mayor parte de su historia. El potencial para ahorrar espacio se encuentra solo en la pequeña parte reciente en la que se han separado. Mira git log branchA..branchB . Esos compromisos son aquellos cuyos objects evitará copyr. ¿Hay algún file binary enorme allí? Cualquier diffs de 1000 líneas? ¿No? Entonces no te molestes con esto. No te va a ayudar.

¿Seguir leyendo? De acuerdo, bueno, no creo que git-clone te permita jugar con el refspec (con la exception de --mirror , pero obviamente eso no es lo que buscamos aquí). Si es realmente importante hacer esto, puedes administrarlo creando un repository vacío y tirando, luego haciendo cuidadosamente el rest de la configuration que el clon habría hecho:

 mkdir foo && cd foo && git init git remote add origin <url> # set up a refspec to get the branch(es) you want git config remote.origin.fetch "+refs/heads/foo:refs/remotes/origin/foo ..." git fetch origin 

Aún te faltan algunas configuraciones; en particular, tienes una twig principal local que no rastrea nada.

Esta es una configuration bastante extraña, no capta todas las twigs desde el origen, pero supongo que debería funcionar. Por supuesto, como dije en mi comentario, es posible que no te estés ahorrando muchos problemas. Recuperar otras sucursales remotas no significa que tenga que crear sucursales locales correspondientes, y a less que esas twigs excluidas sean muy diferentes de las que ha capturado (es decir, que contengan gran cantidad de contenido único), no está ahorrando mucho ancho de banda o espacio en disco.