2012-10-12 22 views
9

Actualmente estoy usando git para un gran repositorio (alrededor de 12 GB, cada rama tiene un tamaño de 3 GB). Este repositorio contiene muchos archivos binarios (audio e imágenes).¿Cómo manejar un repositorio grande de git?

El problema es que clonar y tirar puede llevar mucho tiempo. Especialmente el paso "Resolución de deltas" puede ser muy largo.

¿Cuál es la mejor manera de resolver este tipo de problema?

Intenté eliminar la compresión delta, ya que explica here usando la opción delta en .gitattributes pero parece que no mejora la duración de la clonación.

Gracias de antemano

Kevin

+0

He actualizado mi opinión con git-lts. – VonC

Respuesta

12

Update Abril 2015: Git Large File Storage (LFS) (por GitHub).

Utiliza git-lfs (ver git-lfs.github.com) y probado con un servidor que soporte: lfs-test-server:
Puede almacenar metadatos sólo en el repositorio git, y el gran archivo en otra.

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


Respuesta original (2012)

Una solución, para grandes archivos binarios que no cambia mucho, es almacenarlos en una referencia diferente (como un Nexus repository) y versión solo un archivo de texto que declara qué versión necesita.
El uso de un "depósito de artefactos" es más fácil que almacenar elementos binarios en un origen repo (hecho para comparar versiones y fusionar entre sucursales, que no es de mucha utilidad para dichos binarios).

La otra solución, más centrada en git, es git-annex:

git-annex permite gestión de los archivos con git, sin comprobar el contenido del archivo en Git.
Si bien esto puede parecer paradójico, es útil cuando se manejan archivos más grandes que git actualmente puede manejar fácilmente, ya sea debido a limitaciones en la memoria, el tiempo o el espacio en disco.

Sin embargo, no es compatible con Windows.

Una solución más genérica podría ser git-media, que también le permite usar Git con archivos de medios grandes sin almacenar los medios en Git.

Finalmente, la solución más fácil es aislar esos binarios en su propio git submodule como mencionas en tu pregunta: no es muy satisfactorio, y el clon inicial aún tomará tiempos, pero las próximas actualizaciones para el repositorio padre se breve.

+0

Gracias por estos consejos. Nexus parece ser muy interesante y puede ser útil en muchos otros contextos. Voy a echar un vistazo a esto cuando tenga algo de tiempo :). git-annex podría ser una forma más rápida de resolver mi problema actual. –

+0

git-annex no es compatible con Windows y necesito tanto MacOS como Windows :(. Desmarcaré la respuesta hasta que tenga tiempo de probar con Nexus para ver si alguien tiene otra solución. Gracias de nuevo. –

+0

@KevinMOLCARD no hay problema. tiene alternativas adicionales (vea mi respuesta editada) – VonC

0

Siga estos pasos.

1.instale git lfs en su equipo local escribiendo el siguiente código.

git lfs install 

2.Ahora agregue el tipo de archivo que desea que lfs administre para usted.

git lfs track "*.mp4" 
  1. Ahora que está todo listo. Continúa y agrega, confirma y envía tus archivos y no habrá advertencia.
Cuestiones relacionadas