# How to cut extra liftime of expired loose objects

3 messages from 2016-05-30 to 2016-05-30. Participants: Johannes Sixt, Jeff King, Junio C Hamano.
Thread: https://gitlist.dev/t/42488

## Johannes Sixt, 2016-05-30 16:43

Subject: How to cut extra liftime of expired loose objects
Message-ID: <574C6D9B.1080200@kdbg.org>
URL: https://gitlist.dev/e/574C6D9B.1080200%40kdbg.org

```
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.

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?

-- Hannes

```

## Jeff King, 2016-05-30 18:24

Subject: Re: How to cut extra liftime of expired loose objects
Message-ID: <20160530182405.GA17253@sigill.intra.peff.net>
URL: https://gitlist.dev/e/20160530182405.GA17253%40sigill.intra.peff.net
In-Reply-To: <574C6D9B.1080200@kdbg.org>

```
On Mon, May 30, 2016 at 06:43:07PM +0200, Johannes Sixt wrote:

> 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

```

## Junio C Hamano, 2016-05-30 18:53

Subject: Re: How to cut extra liftime of expired loose objects
Message-ID: <xmqqpos38jix.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqqpos38jix.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <20160530182405.GA17253@sigill.intra.peff.net>

```
Jeff King <peff@peff.net> writes:

> 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).

Your belief is shared by me.

```
