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.
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.
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.
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.
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.
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
È possibile trovare l'autore Mercurial Matt Mackall's paper nel formato revlog interessante.
Una volta che i dati vengono compressi in modo ragionevolmente efficiente, provare a comprimerlo di nuovo genererà di solito un file leggermente più grande. –