Re: Why repository grows after "git gc"? / Purpose of *.keep files?
From: Shawn O. Pearce <hidden>
Date: 2016-06-15 22:44:36
Mike Hommey [off-list ref] wrote:
On Mon, May 12, 2008 at 11:03:04PM +0200, Mike Hommey wrote:quoted
On Mon, May 12, 2008 at 11:24:14PM +0300, Teemu Likonen wrote:quoted
But I have experienced the same earlier with some other post-1.5.5 version so I believe you can reproduce this yourself. After cloning Linus's linux-2.6 repo its .git directory weights 209MB. After single "git pull" and "git gc" it was 298MB in my test.I noticed that a while ago: when repacking multiple packs when one has a .keep file, the resulting additional pack contains too many blobs and trees, contrary to when only packing loose objects:(...) That is, it seems to also contain all the blobs and subtrees for all the commits the pack contains, even when they already are in the pack having a .keep file.
I've noticed this too. Like since day 1 when we added .keep. But uh, nobody else complained and I forgot about it. My theory (totally unproven) is that the new pack has objects we copied from the .keep pack, because those objects were the best delta-bases for the loose objects we have deltafied and want to store in the new pack. Except they aren't yet packed in the new pack, so we pack them too. Tada, duplicates. :-\ Suddenly your repository nearly doubles in size if we have most files/trees change, as those delta bases are copied whole into the new pack. -- Shawn.