From: Hallvard Breien Furuseth Date: Mon, 11 Jun 2012 21:41:56 GMT Subject: Re: Keeping unreachable objects in a separate pack instead of loose? Message-ID: <97844573ed775a758d75eec5508b6c85@ulrik.uio.no> In-Reply-To: <20120611211414.GA32061@sigill.intra.peff.net> On Mon, 11 Jun 2012 17:14:14 -0400, Jeff King wrote: > On Mon, Jun 11, 2012 at 10:44:39PM +0200, Hallvard Breien Furuseth > wrote: > >> >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. > > I would argue that this is not a very interesting case in the first > place, since the right thing to do is use "clone --single-branch"[1] > to > void transferring all of those objects in the first place. Yeah, I just wanted a simple way to fetch a lot and drop most of it, since that's what triggers the problem. A simple use case would be where you did a lot of work between cloing and pruning most refs. I described some actual use cases below the command. > But there are plenty of variant cases, where you are not just > deleting > all of the refs, but rather doing some manipulation of the branches, > diffing them to make sure it is safe to drop some bits, running > filter-branch, etc. And it would be nice to make those cases more > efficient. -- Hallvard