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

Re: [PATCH 0/7] builtin/maintenance: implement missing tasks compared to git-gc(1)

From
Patrick Steinhardt <ps@pks.im>
Date
Apr 30, 2025, 07:08 UTC
Message-ID
<aBHMVm9QIKZwiaBX@pks.im>
In-Reply-To
<3cc1ef7b-40d5-4802-9bf9-ff28824ce563@gmail.com>
On Tue, Apr 29, 2025 at 04:02:18PM -0400, Derrick Stolee wrote:
Show 17 quoted lines
> On 4/25/2025 3:29 AM, Patrick Steinhardt wrote:
> 
> > Right now, git-maintenance(1) still executes git-gc(1). With these last
> > gaps plugged though we can in theory fully replace git-gc(1) with finer
> > grained tasks without losing any functionality. The benefit is that it
> > becomes possible for users to have finer-grained control over what
> > exactly the maintenance does.
> > 
> > This patch series doesn't do that yet, but only implements whatever is
> > needed to get there.
> 
> Thanks for putting this together. I think this is a noble goal, allowing
> users and system administrators more options to fine-tune the best ways to
> optimize their repos.
> 
> I wonder if any of these fine-grained steps would be valuable to add to
> the default background maintenance schedule (perhaps as a follow-up)?

I think so, yes. My immediate goal is to change `git maintenance run --auto` to not run git-gc(1) by default anymore, but to instead have it run the fine-grained steps. But we should probably at the same time also adapt the background maintenance to use the same fine-grained tasks so that the outcome matches.

My idea would be that we implement all of this via high-level strategies that get honored by scheduled, auto and explicit maintenance alike. We already have the "incremental" strategy, but there are other strategies that might make sense to introduce. There should be at least one strategy that achieves the same as git-gc(1) does right now, but there's probably more opportunities here to have e.g. a "geometric" strategy.

Users can then pick whatever strategy works best for them, with us providing a good default as well as rationale why we recommend one strategy over another. Furthermore, expert users can of course tweak these strategies even further by explicitly configuring which of the fine-grained tasks should run.

Thinking ahead a bit, one might even be prompted to auto-select strategies based on repository properties. A tiny repository likely does not need multi-pack indices and cruft packs, but a huge behemoth like the Chromium repository probably would benefit. But that is an iteration that one can think about in the future.

Patrick
Previous: Derrick StoleeNext: Patrick Steinhardt
Message 12 of 37 in “builtin/maintenance: implement missing tasks compared to git-gc(1)”
  1. 0/7 builtin/maintenance: implement missing tasks compared to git-gc(1)Patrick Steinhardt, Apr 25, 2025
  2. 1/7 builtin/gc: fix indentation of `cmd_gc()` parametersPatrick Steinhardt, Apr 25, 2025
  3. 2/7 builtin/gc: remove global variables where it trivial to doPatrick Steinhardt, Apr 25, 2025
  4. 3/7 builtin/gc: move pruning of worktrees into a separate functionPatrick Steinhardt, Apr 25, 2025
  5. 4/7 worktree: expose function to retrieve worktree namesPatrick Steinhardt, Apr 25, 2025
  6. 5/7 builtin/maintenance: introduce "worktree-prune" taskPatrick Steinhardt, Apr 25, 2025
  7. Derrick StoleeApr 29, 2025
  8. Patrick SteinhardtApr 30, 2025
  9. 6/7 builtin/gc: move rerere garbage collection into separate functionPatrick Steinhardt, Apr 25, 2025
  10. 7/7 builtin/maintenance: introduce "rerere-gc" taskPatrick Steinhardt, Apr 25, 2025
  11. Derrick StoleeApr 29, 2025
  12. Patrick SteinhardtApr 30, 2025
  13. 0/7 builtin/maintenance: implement missing tasks compared to git-gc(1)Patrick Steinhardt, May 5, 2025
  14. 1/7 builtin/gc: fix indentation of `cmd_gc()` parametersPatrick Steinhardt, May 5, 2025
  15. 2/7 builtin/gc: remove global variables where it trivial to doPatrick Steinhardt, May 5, 2025
  16. Christian CouderMay 6, 2025
  17. Patrick SteinhardtMay 7, 2025
  18. 3/7 builtin/gc: move pruning of worktrees into a separate functionPatrick Steinhardt, May 5, 2025
  19. Christian CouderMay 6, 2025
  20. Patrick SteinhardtMay 7, 2025
  21. 4/7 worktree: expose function to retrieve worktree namesPatrick Steinhardt, May 5, 2025
  22. Christian CouderMay 6, 2025
  23. Eric SunshineMay 6, 2025
  24. 6/7 builtin/gc: move rerere garbage collection into separate functionPatrick Steinhardt, May 5, 2025
  25. Christian CouderMay 6, 2025
  26. 5/7 builtin/maintenance: introduce "worktree-prune" taskPatrick Steinhardt, May 5, 2025
  27. Christian CouderMay 6, 2025
  28. Patrick SteinhardtMay 7, 2025
  29. 7/7 builtin/maintenance: introduce "rerere-gc" taskPatrick Steinhardt, May 5, 2025
  30. Christian CouderMay 6, 2025
  31. 0/6 builtin/maintenance: implement missing tasks compared to git-gc(1)Patrick Steinhardt, May 7, 2025
  32. 1/6 builtin/gc: fix indentation of `cmd_gc()` parametersPatrick Steinhardt, May 7, 2025
  33. 2/6 builtin/gc: remove global variables where it is trivial to doPatrick Steinhardt, May 7, 2025
  34. 3/6 builtin/gc: move pruning of worktrees into a separate functionPatrick Steinhardt, May 7, 2025
  35. 4/6 builtin/maintenance: introduce "worktree-prune" taskPatrick Steinhardt, May 7, 2025
  36. 5/6 builtin/gc: move rerere garbage collection into separate functionPatrick Steinhardt, May 7, 2025
  37. 6/6 builtin/maintenance: introduce "rerere-gc" taskPatrick Steinhardt, May 7, 2025

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.