[devel] I: about storing tarballs

Dmitry V. Levin ldv на altlinux.org
Чт Апр 20 02:56:25 MSD 2006


Hi,

Информация к размышлению на тему хранения исходного кода,
по мотивам короткого обсуждения в офисе.

$ xdelta delta -9 nmap-4.02Alpha{1,2}.tar.bz2 nmap.delta
$ ls -logS nmap*
-rw-r--r-- 1 1897778 Мар  4 07:32 nmap-4.02Alpha1.tar.bz2
-rw-r--r-- 1 1896625 Мар  9 01:42 nmap-4.02Alpha2.tar.bz2
-rw-r--r-- 1 1885642 Апр 20 00:00 nmap.delta
Подтверждение известного факта: несильно отличающиеся пожатые bzip'ом
файлы отличаются настолько сильно, что xdelta неэффективна.

$ xdelta delta -9 nmap-4.02Alpha{1,2}.tar nmap.delta
$ ls -logS nmap*
-rw-r--r-- 1 10485760 Мар  4 07:32 nmap-4.02Alpha1.tar
-rw-r--r-- 1 10485760 Мар  9 01:42 nmap-4.02Alpha2.tar
-rw-r--r-- 1    28612 Апр 20 00:00 nmap.delta
Ну xdelta она и есть xdelta.

$ xdelta delta -9 nmap-4.02Alpha{1,2}.tar.gz nmap.delta
$ ls -logS nmap*
-rw-r--r-- 1 2377616 Мар  4 07:32 nmap-4.02Alpha1.tar.gz
-rw-r--r-- 1 2376325 Мар  9 01:42 nmap-4.02Alpha2.tar.gz
-rw-r--r-- 1   28621 Апр 20 00:00 nmap.delta
Напоминание о том, что xdelta по умолчанию распаковывает файлы,
пожатые gzip'ом, прежде чем вычислять дельту.

$ git --version
git version 1.3.0
$ git-init-db
defaulting to local storage area
$ git-add nmap-4.02Alpha1.tar
$ git-commit -a -m 'added nmap-4.02Alpha1.tar'
Committing initial tree 85258d162dda0117f7708bccf5d1e9349c99a1c6
$ git-rm nmap-4.02Alpha1.tar
$ git-add nmap-4.02Alpha2.tar
$ git-commit -a -m 'replaced nmap-4.02Alpha1.tar with nmap-4.02Alpha2.tar'
$ du -ksc .git/objects/*
2332    .git/objects/02
8       .git/objects/14
8       .git/objects/21
8       .git/objects/7f
8       .git/objects/85
2332    .git/objects/a5
4       .git/objects/info
4       .git/objects/pack
4704    итого
Отсюда видно, что git, как и следовало ожидать, хранит объекты
в пожатом gzip'ом виде.
$ git-repack -a -d -q
Pack pack-2bfd07a53828de0ec93e61d6382c3cd650da97d5 created.
$ du -ksc .git/objects/*
8       .git/objects/info
2372    .git/objects/pack
2380    итого
Отсюда видно, что в упакованном виде объекты занимают примерно столько же
места, что и nmap-4.02Alpha1.tar.gz+nmap.delta; это наводит на мысль об
используемом алгоритме; RTFS эту мысль подтверждает.

$ git-init-db
defaulting to local storage area
$ git-add nmap-4.02Alpha1.tar.gz
$ git-commit -a -m 'added nmap-4.02Alpha1.tar.gz'
Committing initial tree 4233a782960e126094163106d204074388745589
$ git-rm nmap-4.02Alpha1.tar.gz
$ git-add nmap-4.02Alpha2.tar.gz
$ git-commit -a -m 'replaced nmap-4.02Alpha1.tar.gz with nmap-4.02Alpha2.tar.gz'
$ du -ksc .git/objects/*
8       .git/objects/12
8       .git/objects/16
2324    .git/objects/18
8       .git/objects/42
8       .git/objects/45
2328    .git/objects/d9
4       .git/objects/info
4       .git/objects/pack
4692    итого
$ git-repack -a -d -q
Pack pack-8d8d591db747584462d34e3b6a8bc6fa498a5f20 created.
$ du -ksc .git/objects/*
8       .git/objects/info
4656    .git/objects/pack
4664    итого
Отсюда видно, что с файлами, пожатыми gzip'ом, экономии в git не получается.
Таким образом, в git лучше класть непожатые файлы, тогда при желании
их можно будет хранить экономно.


-- 
ldv
----------- следущая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 191 байтов
Описание: отсутствует
Url     : http://lists.altlinux.org/pipermail/devel/attachments/20060420/8325fb5d/attachment-0001.bin 


Подробная информация о списке рассылки Devel