Personally, I find the Patch Theory options the most compelling since fundamentally patches should commute—weaning it doesn’t matter if patch α or patch β was merged first & you start to feel weird that you get merge conflicts despite the same end result in something snapshot-based. The two big contenders are Darcs, the still-maintained pioneer in the space & new(ish)comer, Pijul. Darcs has less rough edges being about as old, stamse as Git but has some performance issues (where some of the old perf issues are fixed, some remain) & being Haskell, libraries get created since that community loves to code more than it likes to maintain so libraries can go out of date & package tooling still isn’t what it could be. Pijul, memes aside, is written in Rust with some more modern sensibilities & a really cool idendependity identity management system (you can hide your name/email for privacy, or change it to not be deadnamed & not have to raise a merge request to rebase you identity on all repos you contributed), but it’s pretty barebones despite being technically feature complete I believe—with rebase being missing feels like a glaring issue as the way to fix patches isn’t fully exposed. Nest, the forge of the creator, is pretty lackluster too IMO from featureset to self-hosting stack without any real alternative yet. It’s still a project worth watching & SSH+HTTPS work fine for hobby projects. Darcsden is fine but not great, but newly started Smeederee seems to be going in a good direction, the rest of the forges are written in like Python 2. …Which is the part where I would like to see some of that yet-another-Git-forge effort flow into these channels.
Fossil is interesting too for shipping the whole forge, & have heard great for small teams as that is what is optimized for, but I haven’t used it.