2010-07-01 6 views
6

Quiero algo en git que sea similar al Mercurial's Bigfiles Extension (nota: sé de git-bigfiles, pero eso no está relacionado).Git análogo a la extensión Bigfiles de Hg?

Básicamente quiero almacenar binarios grandes en mi repositorio de git, pero no quiero obtener todas las versiones del binario grande cuando hago un clon. Solo quiero descargar los archivos binarios grandes cuando pago una revisión específica que contenga esos archivos grandes.

Respuesta

5

Estas son algunas opciones a considerar:

clones poco profundos: Usted puede agregar el parámetro --depth <depth> a git clone para obtener un clon sin profundidad del repositorio. p.ej. si <depth> es 1, esto significa que el clon solo obtendrá los archivos necesarios para la confirmación más reciente. Sin embargo, este tipo de repositorios tienen restricciones incómodas sobre lo que puede hacer con ellos, como se indica en la página git clone hombre:

 
     --depth 
      Create a shallow clone with a history truncated to the specified 
      number of revisions. A shallow repository has a number of 
      limitations (you cannot clone or fetch from it, nor push from nor 
      into it), but is adequate if you are only interested in the recent 
      history of a large project with a long history, and would want to 
      send in fixes as patches. 

De hecho, como se discute en this thread que es algo así como una exageración - hay situaciones útiles donde empujando desde un clon superficial seguirá funcionando, y es posible que se ajuste a su flujo de trabajo.

"medios git" de Scott Chacon extensión: el autor describe esto en respuesta a this similar question y en el README en github: http://github.com/schacon/git-media.

Submódulos poco profundos: puede guardar todos sus archivos grandes en un repositorio git separado y agregarlo como shallow submodule a su repositorio principal. Esto tendría la ventaja de que no tienes las restricciones de los clones superficiales para tu código, solo el repositorio con los archivos grandes.

También hay varias maneras de hacerlo agregando ganchos que (por ejemplo) rsync sobre sus archivos grandes desde git hooks, pero supongo que hay buenas razones por las que quiere mantener estos archivos bajo el control de git en primer lugar.

Espero que sea de alguna ayuda.

+0

git-media tiene exactamente lo que yo quiero, pero aún no está terminado. Creo que lo hice funcionar con un poco de piratería. Ahora solo necesito codificar en soporte para subir archivos a donde quiero que vayan. – davr

+0

Para referencia futura, aquí está mi fork de git-media con algunos cambios necesarios: http://github.com/davr/git-media – davr

+0

¡Genial, eso se ve muy útil! Al igual que otro punto de interés, el hilo aquí (y en particular las diapositivas vinculadas en el primer correo) son interesantes sobre el tema de git tratar con archivos de gran tamaño http://git.661346.n2.nabble.com/Git-and -Media-repositories-td1446700.html –

Cuestiones relacionadas