On Sun, Jun 12, 2016 at 07:43:27PM -0600, Nasser Grainawi wrote: > On Jun 12, 2016, at 4:13 PM, Jeff King <peff@xxxxxxxx> 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html