[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