From: Hallvard Breien Furuseth Date: Mon, 11 Jun 2012 20:44:39 GMT Subject: Re: Keeping unreachable objects in a separate pack instead of loose? Message-ID: <0450a24b1f53420f36a3d864c50536cb@ulrik.uio.no> In-Reply-To: <20120611183414.GD20134@sigill.intra.peff.net> On Mon, 11 Jun 2012 14:34:14 -0400, Jeff King wrote: > On Mon, Jun 11, 2012 at 01:27:32PM -0400, Ted Ts'o wrote: >> So depending on how you would want to do the comparison, probably >> the >> fairest thing to say is that I had a total "good" packs totally >> about >> 16 megs, and the loose cruft objects was an additional 4.5 >> megabytes. > > OK, so that 4.5 is at least a respectable percentage of the total > repo > size. I suspect it may be worse for small repos in that sense, (...) 'git gc' gave a 3100% increase with my example: $ git clone --bare --branch linux-overhaul-20010122 \ git://git.savannah.gnu.org/config.git $ cd config.git/ $ git tag -d `git tag`; git branch -D master $ du -s objects 624 objects $ git gc $ du -s objects 19840 objects Basically: Clone/fetch a repo, keep a small part of it, drop the rest, and gc. Gc explodes all the objects you no longer want. This hits you hard if your small project tracks a big one, and later ceases doing so. Maybe your project is to convert a small part of the remote into a library, or you're just tracking a few files from the remote - e.g. from the GNU Config repo. Not something one does every day, but it does happen. Tweaks to expiration time etc do not help here. Hallvard