2011-08-18 8 views
30

Tengo un repositorio lleno de archivos zip, volver a comprimir estos archivos será una pérdida de tiempo.git pull sin comprimir objetos de forma remota

He tratado de establecer core.compression = 0 en el control remoto y la copia local sin éxito

git config core.compression 0 
git config core.loosecompression 0 

git pull todavía lo hacen

remote: Counting objects: 23, done. 
remote: Compressing objects: ... 
+1

¿Ha medido la diferencia de rendimiento? No me preocuparía el tiempo dedicado a comprimir datos ya comprimidos; las redes son probablemente mucho más lentas que tu CPU. –

Respuesta

43

El problema de tiempo que tuve fue causado por la compresión delta.

La solución para mí fue

echo '*.zip -delta' > .gitattributes 
git gc 

me van a citar el excelente respuesta de http://lists-archives.org/git/719515-serious-performance-issues-with-images-audio-files-and-other-non-code-data.html

Git hace pasar un poco de tiempo en zlib para algunas cargas de trabajo, pero no debería crea problemas en el orden de los minutos.

Para empujar y tirar, es probable que al ver la compresión delta, que puede ser lento para archivos de gran tamaño

core.compression no pareció 0 # para trabajar.

Esto debería desactivar la compresión zlib de objetos sueltos y objetos dentro de los paquetes. Puede ahorrar un poco de tiempo para objetos que no se comprimirán, pero perderá los beneficios de tamaño para cualquier archivo de texto.

Pero no desactivará la compresión delta, que es lo que hace la fase de "compresión ... durante el empuje y el arrastre". Y que es es más probable que sea la causa de la lentitud.

pack.window 0

Se establece el número de otros objetos git tendrá en cuenta cuando se hace delta compresión. Establecerlo bajo debería mejorar sus tiempos de empuje/extracción. Pero perderá el beneficio sustancial de la compresión delta de sus archivos sin imagen (y metaobjetos de git). Entonces, la opción "-delta" sobre para archivos específicos es una solución mucho mejor.

echo '* .jpg -delta'> .gitattributes

Además, considere volver a empaquetar su repositorio, lo que generará un PACKFILE que será reutilizada durante el tira y afloja.

Tenga en cuenta que las configuraciones deben realizarse en el repositorio desde el que está obteniendo/tirando, no en el que está recogiendo/tirando.

+7

sugiero usar ">>" ya que esto sobrescribirá cualquier otra cosa que ya tengas en tu archivo '.gitattributes':' echo '* .zip -delta' >> .gitattributes' – scottgwald

7

Los medios de línea compressing object es hacer el trabajo pack ing. Eso incluye diferir los árboles y esas cosas. No está "comprimiendo" en el sentido de core.compression.

+1

bien, entonces ¿cómo evito que Git Pull haga el trabajo de empaque? – hdorio

+4

@Doud Usted no. Git empaca cosas. Este es un comportamiento bueno y deseable. – meagar

+0

@Doud ¿cómo muevo mi casa sin empacar? –