2010-09-09 3 views
9

Esto es probablemente obvio y se me ha preguntado muchas veces de diferentes maneras antes, pero no he podido encontrar la respuesta después de buscar por algún tiempo.¿Obtener/extraer parte del depósito de gran tamaño?

Supongamos lo siguiente:

  • tengo, por ejemplo, un disco de 500 GB en el extremo local;
  • Tengo un repositorio remoto de 100 terabytes; por lo tanto, el costo de clonar todo el repositorio simplemente no es factible;
  • el directorio de trabajo utilizado para crear el repositorio remoto se compone de 1000 directorios de nivel superior DIR001, DIR002, ... DIR00N cada uno contiene múltiples subdirectorios con archivos solo debajo de los subdirectorios (por ejemplo, DIR001/subdir1/archivoA1 ... DIR001/subf1/fileAN y DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN, ...
  • yo no etiquetar de forma explícita o directorios de rama DIR001, DIR002, ... DIR00N o cualquier otra cosa para esa materia
  • me iNIT un nuevo repositorio Git local de

¿Cómo eficiente saco o en Obtener la última c Versiones omitidas de, digamos, DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN del repositorio remoto y nada más?

Y

sólo la última versión comprometida de un solo archivode DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN desde el repositorio remoto y nada más?

Y

¿Cómo eficiente tire o ir a buscar una versión previamente cometido de un subconjunto de dichos archivos y nada más?

Quizás fetch/pull no sea el comando correcto para esto.

+0

Lo siento, no puedo responder a su pregunta, pero tenga en cuenta que las firmas y frases son "desaconseja" en StackOverflow. Puede encontrar más información aquí: http://meta.stackexchange.com/questions/5029/are-taglines-signatures-disallowed/5038#5038 –

+0

Nota: con git-lfs (abril de 2015), pull/fetch sería más eficiente. Ver mi respuesta editada. – VonC

+0

Git 2.5 (Q2 2015) admite una única confirmación de recuperación. He editado mi respuesta a continuación, haciendo referencia ahora a "[Extraiga una confirmación específica de un repositorio remoto de git]" (http://stackoverflow.com/a/30701724/6309) ". – VonC

Respuesta

5

La respuesta a "Partial cloning" puede ayudarlo a comenzar a experimentar con clones poco profundos.
Pero se limitará:

  • a una cierta profundidad, y/o para ciertas ramas,
  • pero no a ciertos archivos o directorios (se puede obtener un archivo o directorio, aunque la caja escasa, pero todavía tiene que obtener el repo completo primero!)
  • Incluso una determinada confirmación.
    (Git 2.5 (Q2 2015) admite una única confirmación de recuperación! Consulte "Pull a specific commit from a remote git repository").

La verdadera solución sería separar el enorme repositorio remoto en submódulos.
Consulte What are Git limits o Git style backup of binary files para ilustrar este tipo de situación.


Update Abril 2015:

Git Large File Storage (LFS) haría tirón/ha podido ir mucho más eficiente (por GitHub, abril de 2015).

El proyecto es git-lfs (ver git-lfs.github.com) y probado con el servidor apoyándolo: lfs-test-server:
Puede almacenar metadatos sólo en el repositorio git, y el archivo de gran tamaño en otros lugares.

https://cloud.githubusercontent.com/assets/1319791/7051226/c4570828-ddf4-11e4-87eb-8fc165e5ece4.gif

Cuestiones relacionadas