2009-08-13 19 views
5

che sto vedendo che mercuriale comprime in modo efficiente i file nel repositoryIn che modo Mercurial comprime i file nel repository?

(repo/.hg/store/data) 

Qualcuno sa che tipo di compressione utilizzato per i file repository?

Grazie.

+0

Una volta che i dati vengono compressi in modo ragionevolmente efficiente, provare a comprimerlo di nuovo genererà di solito un file leggermente più grande. –

risposta

7

Esistono due livelli di compressione nei repository Mercurial: archivio delta e zlib compression.

Inoltre, varie altre parti impiegano anche la compressione. Ad esempio, i pacchetti possono essere compressi sia con gzip che con bzip2, così come possono archiviare i tarball, ma non penso che stavate chiedendo di questi.

+0

Potrebbe voler notare che Mercurial sta cambiando la compressione predefinita in Zstandard, il che sta dando significativi miglioramenti nelle prestazioni e nei rapporti di compressione. Mercurial 4.1 utilizza zstd per la trasmissione se sia il client che il server lo supportano, ma il formato del repository non è ancora stato modificato.

1

Le versioni iniziali dei file vengono compresse utilizzando deflate (stesso algoritmo di zip), ma per i file aggiornati, Mercurial memorizza solo una diff (binaria) rispetto a una versione precedente.

Cerca anche di fare la cosa giusta: quando un JPEG sgonfio risulta più grande dell'originale, non lo memorizza "compresso", per esempio.

+4

In realtà fa un po 'di più. Se * solo * memorizzi i delta, il tempo di rigenerare un file memorizzato dai revlog aumenta come una funzione del numero di changeset (cioè questo un algoritmo O (N)). Per legare quel processo Mercurial memorizza periodicamente l'intero file * di nuovo *, e si affida alla compressione zlib per ridurlo a una dimensione ragionevole. – quark

Problemi correlati