git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: How to cut extra liftime of expired loose objects

From
Jeff King <peff@peff.net>
Date
May 30, 2016, 18:24 UTC
Message-ID
<20160530182405.GA17253@sigill.intra.peff.net>
In-Reply-To
<574C6D9B.1080200@kdbg.org>
On Mon, May 30, 2016 at 06:43:07PM +0200, Johannes Sixt wrote:
Show 6 quoted lines
> I think there is logic somewhere in git gc or its minions that gives expired
> objects that have been packed a two weeks extra life time as loose objects.
> 
> That is, reachable loose objects are moved to a pack, but those objects that
> were packed, but become unreachable due to expired reflogs, are evicted from
> the pack and live for another two weeks or so as loose objects.

Sort of. The loose objects should get the mtime of the pack, which is likely newer than 2 weeks. So it's not a 2-week extension, but it may take up to 2 weeks for them to go away (and if the pack is already more than 2 weeks old, the objects are dropped without even loosening).

> As a consequence of this, I always have a few thousand loose objects in my
> busy repositories, no matter how often I collect garbage. Is there a knob
> that removes the extra lease of life of objects without reducing the usual
> expiration times of reflogs etc?
gc.pruneExpire should do this.

I have run into this, too, and it interacts annoyingly with the background-gc (which complains "you have too many objects; run git-prune", leaves that in a .lock file, and then every subsequent auto-gc spews it at me).

I think we should consider dropping the default time to something more like 1 day. The 2-week period predates reflogs, I believe (OTOH, it does save objects which you might have used with "git add" but never actually committed).

-Peff
Previous: Johannes SixtNext: Junio C Hamano
Message 2 of 3 in “How to cut extra liftime of expired loose objects”
  1. Johannes SixtMay 30, 2016
  2. Jeff KingMay 30, 2016
  3. Junio C HamanoMay 30, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.