2009-08-13 9 views
5

Je vois que Mercurial compresse efficacement les fichiers dans le dépôtComment compresser les fichiers mercurial dans le dépôt?

(repo/.hg/store/data) 

Quelqu'un sait quel type de compression utilisé pour les fichiers du référentiel?

Merci.

+0

Une fois que les données sont compressées de manière raisonnablement efficace, essayer de les compresser à nouveau entraînera généralement un fichier légèrement plus gros. –

Répondre

7

Il existe deux niveaux de compression dans les référentiels Mercurial: le stockage delta et zlib compression.

En outre, diverses autres pièces utilisent également la compression. Par exemple, les bundles peuvent être compressés à la fois avec gzip et bzip2, tout comme les archives tar, mais je ne pense pas que vous le demandiez.

+0

Mai tiens à noter que Mercurial est en train de changer la compression par défaut à Zstandard, ce qui donne des améliorations significatives dans les performances et les taux de compression. Mercurial 4.1 utilise zstd pour la transmission si le client et le serveur le prennent en charge, mais le format du référentiel n'a pas encore été modifié.

1

Les versions initiales des fichiers sont compressées en utilisant deflate (même algorithme que zip), mais pour les fichiers mis à jour, Mercurial stocke uniquement un diff (binaire) par rapport à une version précédente.

Il essaye également de faire la bonne chose: Quand un JPEG dégonflé s'avère plus grand que l'original, il ne le stockera pas "comprimé", par exemple.

+4

Il fait en fait un peu plus que cela. Si vous enregistrez * seulement * les deltas, le temps nécessaire pour régénérer un fichier stocké à partir des revlog augmente en fonction du nombre de changesets (c'est-à-dire un algorithme O (N)). Pour lier ce processus, Mercurial stocke périodiquement le fichier entier * à nouveau *, et s'appuie sur la compression zlib pour réduire cette taille à une taille raisonnable. – quark

Questions connexes