Почему при пережатии репозиториев такой разный расход памяти, что на это влияет, и существует ли правило хорошего коммита в контексте эффективности хранения?
Вот для первой репы одной конторы:
$ du -sh .git && time git gc --aggressive && du -sh .git
106M .git
Counting objects: 85507, Fertig.
Delta compression using up to 8 threads.
Compressing objects: 100% (83185/83185), Fertig.
Writing objects: 100% (85507/85507), Fertig.
Total 85507 (delta 48961), reused 34092 (delta 0)
real 5m5.723s
user 16m53.928s
sys 0m11.548s
78M .git
$
top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8739 gag 20 0 21,663g 0,015t 13192 S 200,0 95,26 16:03.76 git
Для пережатия 106MB --> 78 MB понадобилось 15+ GB памяти!!!
А вот для второй:
du -sh .git && LC_ALL=C time git gc --aggressive && du -sh .git
370M .git
Counting objects: 441196, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (435440/435440), done.
Writing objects: 100% (441196/441196), done.
Total 441196 (delta 340323), reused 98133 (delta 0)
Checking connectivity: 441196, done.
1033.24user 3.64system 3:37.37elapsed 476%CPU (0avgtext+0avgdata 13100464maxresident)k
0inputs+566784outputs (0major+2111645minor)pagefaults 0swaps
282M .git
top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15726 gag 20 0 12,640g 0,012t 337564 S 100,3 76,19 16:57.23 git
Понадобилось 12+ GB. Причём расход резко растёт с всего 1 GB на 99% (~434000 объект).
А если пережимать ванильный linux.git, который весит 860+ MB, то хватает и 4 GB оперативки.
$ du -sh .git && LC_ALL=C time git gc --aggressive && du -sh .git
862M .git
Counting objects: 4147770, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4116901/4116901), done.
Writing objects: 100% (4147770/4147770), done.
Total 4147770 (delta 3484456), reused 663280 (delta 0)
Checking connectivity: 4147770, done.
4777.02user 31.57system 11:38.36elapsed 688%CPU (0avgtext+0avgdata 4787684maxresident)k
0inputs+1698728outputs (0major+20081695minor)pagefaults 0swaps
862M .git
$
top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12637 gag 20 0 5148492 4,555g 852956 R 100,0 29,11 79:15.25 git
Как смотреть эти объекты по номеру, который выдаёт git в процессе пережатия?
И где формула для total <-> compressing <-> delta <-> reused объектов?