2009-08-13 23 views
5

widzę że mercurial wydajnie kompresuje pliki w repozytoriumW jaki sposób kompresuje pliki mercurial w repozytorium?

(repo/.hg/store/data) 

Czy ktoś wie, jaki rodzaj kompresji służy do plików repozytorium?

Dzięki.

+0

Gdy dane zostaną skompresowane w miarę sprawnie, próba ponownego skompresowania spowoduje zwykle nieco większy plik. –

Odpowiedz

7

Istnieją dwa stopnie sprężania Mercurial repozytorium: delta przechowywania i zlib compression.

Ponadto różne inne części wykorzystują również kompresję. Na przykład pakiety mogą być kompresowane zarówno przy pomocy gzip, jak i bzip2, tak jak archiwum archiwów - ale nie sądzę, że o to prosiłeś.

+0

Należy zauważyć, że Mercurial jest w trakcie zmiany domyślnej kompresji na Zstandard, co daje znaczną poprawę wydajności i współczynników kompresji. Mercurial 4.1 używa zstd do transmisji, jeśli zarówno klient, jak i serwer go obsługują, ale format repozytorium jeszcze się nie zmienił.

1

Wstępne wersje plików są kompresowane przy użyciu opróżnić (sam algorytm jako ZIP), ale dla zaktualizowanych plików, przechowuje tylko Mercurial (binarne) diff przeciwko poprzedniej wersji.

próbuje również zrobić dobry uczynek: Po wypuszczeniu powietrza JPEG okazuje się większa niż w oryginale, to nie będzie przechowywać go „skompresowany”, na przykład.

+4

To naprawdę robi trochę więcej. Jeśli tylko * przechowujesz delty, czas regeneracji zapisanego pliku z revlogów rośnie w zależności od liczby zestawów zmian (to jest algorytmu O (N)). Aby związać ten proces, Mercurial okresowo przechowuje cały plik * ponownie * i opiera się na kompresji zlib, aby zgnieść ją z powrotem do rozsądnego rozmiaru. – quark

Powiązane problemy