Jeff King <p...@peff.net> writes:
> This is a repost from here:
> which got no response initially. Basically the issue is that read-only
> repos (e.g., a CI server) whose workflow is something like:
> git fetch $some_branch &&
> git checkout -f $some_branch &&
> make test
> will never run git-gc, and will accumulate a bunch of small packs and
> loose objects, leading to poor performance.
> Patch 1 runs "gc --auto" on fetch, which I think is sane to do.
> Patch 2 optimizes our pack dir re-scanning for fetch-pack (which, unlike
> the rest of git, should expect to be missing lots of objects, since we
> are deciding what to fetch).
> I think 1 is a no-brainer. If your repo is packed, patch 2 matters less,
> but it still seems like a sensible optimization to me.
> [1/2]: fetch: run gc --auto after fetching
> [2/2]: fetch-pack: avoid repeatedly re-scanning pack directory
Both makes sense to me.
I also wonder if we would be helped by another "repack" mode that
coalesces small packs into a single one with minimum overhead, and
run that often from "gc --auto", so that we do not end up having to
have 50 packfiles.
When we have 2 or more small and young packs, we could:
- iterate over idx files for these packs to enumerate the objects
to be packed, replacing read_object_list_from_stdin() step;
- always choose to copy the data we have in these existing packs,
instead of doing a full prepare_pack(); and
- use the order the objects appear in the original packs, bypassing
The procedure cannot be a straight byte-for-byte copy, because some
objects may appear in multiple packs, and extra copies of the same
object have to be excised from the result. OFS_DELTA offsets need
to be adjusted for objects that appear later in the output and for
objects that were deltified against such an object that recorded its
base with OFS_DELTA format.
But other than such OFS_DELTA adjustments, it feels that such an
"only coalesce multiple packs into one" mode should be fairly quick.
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html