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

[PATCH 0/3] repack --keep-unreachable

From
Jeff King <peff@peff.net>
Date
Jun 13, 2016, 04:33 UTC
Message-ID
<20160613043313.GA29422@sigill.intra.peff.net>
In-Reply-To
<C04883EB-2170-47C3-94E7-AE13516FD0C0@codeaurora.org>
On Sun, Jun 12, 2016 at 07:43:27PM -0600, Nasser Grainawi wrote:
Show 15 quoted lines
> On Jun 12, 2016, at 4:13 PM, Jeff King <peff@peff.net> wrote:
> > 
> >    At GitHub we actually have a patch to `repack` that keeps all
> >    objects, reachable or not, in the pack, and use it for all of our
> >    automated maintenance. Since we don't drop objects at all, we can't
> >    ever have such a race. Aside from some pathological cases, it wastes
> >    much less space than you'd expect. We turn the flag off for special
> >    cases (e.g., somebody has rewound history and wants to expunge a
> >    sensitive object).
> > 
> >    I'm happy to share the "keep everything" patch if you're interested.
> 
> We have the same kind of patch actually (for the same reason), but
> back on the shell implementation of repack. It'd be great if you could
> share your modern version.

Here is a cleaned-up version of what we run at GitHub (so this is a concept that has been exercised for a few years in production, but I had to forward port the patches a bit; I _probably_ didn't introduce any bugs. :) ).

The heavy lifting is done by the existing --keep-unreachable option to pack-objects, which Junio added a long time ago[1] in support of a safer "gc --auto". But it doesn't look like we ever documented or exercised it, and "gc --auto" ended up using the loosen-unreachable strategy instead. In fact, the rest of that series seems to have been dropped; I couldn't find any discussion on the list explaining it, or why this one patch was kept (so I don't think anybody upstream has ever used this code, but as I said, we have been doing so for a few years, so I feel confident in it).

  [1/3]: repack: document --unpack-unreachable option
  [2/3]: repack: add --keep-unreachable option
  [3/3]: repack: extend --keep-unreachable to loose objects
-Peff
[1] http://article.gmane.org/gmane.comp.version-control.git/58413
Previous: Nasser GrainawiNext: Jeff King
Message 8 of 11 in “Repacking a repository uses up all available disk space”
  1. Konstantin RyabitsevJun 12, 2016
  2. Jeff KingJun 12, 2016
  3. Konstantin RyabitsevJun 12, 2016
  4. Jeff KingJun 12, 2016
  5. Duy NguyenJun 13, 2016
  6. Jeff KingJun 13, 2016
  7. Nasser GrainawiJun 13, 2016
  8. 0/3 repack --keep-unreachableJeff King, Jun 13, 2016
  9. 1/3 repack: document --unpack-unreachable optionJeff King, Jun 13, 2016
  10. 2/3 repack: add --keep-unreachable optionJeff King, Jun 13, 2016
  11. 3/3 repack: extend --keep-unreachable to loose objectsJeff King, Jun 13, 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.