2009-08-13 15 views
5

que estoy viendo que mercurial comprime de manera eficiente los archivos en el repositorio¿Cómo comprime mercurial los archivos en el repositorio?

(repo/.hg/store/data) 

¿Alguien sabe qué tipo de compresión se utiliza para archivos del repositorio?

Gracias.

+0

Una vez que los datos se comprimen de forma razonablemente eficiente, intentar comprimirlos de nuevo generalmente dará como resultado un archivo ligeramente más grande. –

Respuesta

7

Hay dos niveles de compresión en los repositorios Mercurial: almacenamiento delta, y zlib compression.

Además, otras partes también emplean compresión. Por ejemplo, los paquetes se pueden comprimir con gzip y bzip2, al igual que archivar tarballs, pero no creo que los haya solicitado.

+0

Quisiera observar que Mercurial está en el proceso de cambiar la compresión predeterminada a Zstandard, lo que está dando mejoras significativas en las relaciones de rendimiento y compresión. Mercurial 4.1 usa zstd para la transmisión si tanto el cliente como el servidor lo admiten, pero el formato del repositorio aún no ha cambiado.

1

Las versiones iniciales de los archivos se comprimen usando desinflar (el mismo algoritmo que zip), pero para los archivos actualizados, Mercurial almacena solo una diferencia (binaria) con respecto a una versión anterior.

También intenta hacer lo correcto: cuando un JPEG desinflado resulta más grande que el original, no lo almacenará "comprimido", por ejemplo.

+4

Realmente hace un poco más que eso. Si * solo * almacena deltas, el tiempo para regenerar un archivo almacenado de los revlogs crece como una función del número de conjuntos de cambios (es decir, este es un algoritmo O (N)). Para enlazar ese proceso, Mercurial almacena periódicamente todo el archivo * otra vez, y confía en la compresión zlib para reducir ese tamaño a un tamaño razonable. – quark

Cuestiones relacionadas