Jeff King <peff@xxxxxxxx> writes: > This is a repost from here: > > http://thread.gmane.org/gmane.comp.version-control.git/211176 > > 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 > > -Peff 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 compute_write_order(). 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html