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

Re: git auto-repack is broken...

From
Jeff King <peff@peff.net>
Date
Dec 2, 2011, 17:45 UTC
Message-ID
<20111202174546.GA24093@sigill.intra.peff.net>
In-Reply-To
<7vobvqoozr.fsf@alter.siamese.dyndns.org>
On Fri, Dec 02, 2011 at 09:35:52AM -0800, Junio C Hamano wrote:
Show 11 quoted lines
> Jeff King <peff@peff.net> writes:
> 
> > When the objects become unreferenced, we eject them from the pack into
> > loose form again. If they don't become referenced in the 2-week window,
> > they get pruned then. So yes, you drop the age information, but they do
> > eventually go away.
> 
> If you update gc/repack -A to put them in a separate pack, then you would
> never be able to get rid of them, no? You pack, then eject (which gives
> them a fresher timestamp), then notice that you are within the 2-week window
> and pack them again,...

But we shouldn't be packing totally unreferenced objects. Barring bugs, the life cycle of such an object should be something like:

  1. Object X is created on branch 'foo'.
  2. Branch 'foo' is deleted, but its commits are still in the HEAD
     reflog, referencing X.
  3. 90 days pass (actually, I think this might be the 30-day
     expire-unreachable time)
  4. "git gc" runs "git repack -Ad", which will eject X from the pack
     into a loose form (because it is not becoming part of the new pack
     we are writing).
  5. Two weeks pass.
  6. "git gc" runs "git prune --expire=2.weeks.ago", which removes the
     object.

"gc" runs between (4) and (6) will not re-pack the object, because it remains unreferenced.

I think things might be slowed somewhat by "gc --auto", which will not do a "repack -A" until we have too many packs. So steps (3) and (4) are really more like "gc runs git-repack without -A" 50 times, and then we finally run "git repack -A".

-Peff
Previous: Junio C HamanoNext: Junio C Hamano
Message 6 of 18 in “git auto-repack is broken...”
  1. Linus TorvaldsDec 2, 2011
  2. Ævar Arnfjörð BjarmasonDec 2, 2011
  3. Linus TorvaldsDec 2, 2011
  4. Jeff KingDec 2, 2011
  5. Junio C HamanoDec 2, 2011
  6. Jeff KingDec 2, 2011
  7. Junio C HamanoDec 2, 2011
  8. Jeff KingDec 2, 2011
  9. Brandon CaseyDec 3, 2011
  10. Nicolas PitreDec 7, 2011
  11. Jeff KingDec 7, 2011
  12. Nicolas PitreDec 8, 2011
  13. Jeff KingDec 8, 2011
  14. Nicolas PitreDec 8, 2011
  15. Jeff KingDec 8, 2011
  16. Junio C HamanoDec 9, 2011
  17. Nicolas PitreDec 9, 2011
  18. Jeff KingDec 8, 2011

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.