An other useful high-level option is git-sizer (https://github.com/github/git-sizer) which tries to expose a few useful trouble spots, there's not much that can be done if the repository is just big (long history of wide working copies with lots of changes), but sometimes it's just that there are a bunch of large binary assets.
This may be more likely if the repository was converted from a centralised VCS where storing large assets or files is less of an issue, likewise the bad compression. Though obviously removing such large assets from the core repository still requires rewriting the entire thing.
https://github.blog/2020-12-21-get-up-to-speed-with-partial-...
To be clear, I was not suggesting deleting the old repo. Keep it for historical purposes, whether you rewrite or start fresh.
https://blog.isquaredsoftware.com/2018/11/git-js-history-rew...
I specifically was looking for techniques that would let me quickly iterate over ~15000 commits.
granted, the repo size I was working with was only a few GB, but hopefully there's some pieces there you can find useful.
In my experience you'll have references to the commits in a repo from outside of the repo: links from Slack, Jira, other repos, etc to specific commit IDs. When you rewrite history, all of the commit IDs change. That's why I recommend archiving the original repo so as not to break any such references. Create the new repo, either rewritten or seeded from the old, in a new location.
It would be neat if git supported a "rewite map" to allow it to redirect from one revision to another, sort of like how `git blame` can be configured to ignore revisions.