this post was submitted on 16 Apr 2024
350 points (95.8% liked)
Open Source
31402 readers
75 users here now
All about open source! Feel free to ask questions, and share news, and interesting stuff!
Useful Links
- Open Source Initiative
- Free Software Foundation
- Electronic Frontier Foundation
- Software Freedom Conservancy
- It's FOSS
- Android FOSS Apps Megathread
Rules
- Posts must be relevant to the open source ideology
- No NSFW content
- No hate speech, bigotry, etc
Related Communities
Community icon from opensource.org, but we are not affiliated with them.
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
What would you suggest is a better DVCS than git?
Personally, I find the Patch Theory options the most compelling since fundamentally patches should commute—meaning 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, stable 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 & has a really cool independent 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 your new identity on all repos you’ve contributed to), 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 muliple patches without losing metadata isn’t fully exposed. Nest, the forge from Pijul’s 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. For Darcs, Darcsden is fine but not great & showing its age, but newly started Smeederee seems to be going in a good direction, the rest of the old 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 & enegery flow into these channels.Fossil is interesting too for shipping the whole forge, & have heard it’s great for small teams as that is what it’s optimized for, but I haven’t used it.
Pijul is a very exciting project. I’ve wanted to try it for months buy haven’t found the time.
Not to say don’t (do try it), but Darcs might be better if you just want to understand some of the fundamentals since it’s more mature. A small project will not perceive any performance difference. If you use Git’s CLI heavily, Pijul’s CLI will seem barren in comparison & tooling even like vim-signify doesn’t have support. Pijul’s
diff
isn’t GNUdiff
compatible so that tooling won’t help either.If you grasp Darcs, moving to Pijul is pretty simple since they are based on the same theory—you just might need to be invested enough to start building your own tooling which is more of a time commitment. Pijul is meant to be scripted which is partly why it’s barren—so for a trivial expample I created a small shell script
pijul-amend
which wrapspijul record --amend
which is picked up aspijul amend
mimickingdarcs amend
. Maintenance is easier when a project supports only the minimum set of commands, but you’ll be building your own ergonomics (no rebase, no send-mail, etc.). Maybe in the future when there is a bigger contrib space to fill in the gaps, it won’t be such an investment to just to test out.If Darcs has performance issues, how is it better than git?
In many scenarios you probably won’t notice… but also Pijul has ‘fixed’ that fundamental perfomance issue. The Patch Theory states that patches, without depending patches that would cause a conflict, should commute—i.e. patch α + patch β ≡ patch β + patch α in the same way 1 + 4 ≡ 4 + 1 (order does not matter, output is equivalent). What this eliminates is an entire class of merge conflicts & opens up new ways to handle diffing. This particular class of conflicts makes it easier to work in a distributed project as anyone can pull in anyone else’s patch at different times in project without conflicts. In practice with Git being snapshot-based & patch order mattering, this tends to cause folks to rely on a centralized, canonical Git server to merge into to be able to ask what the order should be so everyone doesn’t get stuck in their rebases/pulls (
rerere
fails a lot).It turns out there is more to version control than how fast CPU go; if we measured programming languages with the same stick, we’d all only write assembly since everything else has a performance penalty.
The way you write about this seems very evangelical.
I use git every day and I don't recall patch ordering ever being a problem.
Evangelical in that it’s documented as a theory & a paper for the concepts you can read about? Communicative properties are common in math--what’s novel is applying those properties to patches for source control compared to the older models.
Have you worked in a distributed team sharing just patches over email? If Alice pulls from Bob & then Catherine, but David reads & applies Catherine’s then Bob’s, Alice & David now have a conflict in the ordering when trying to push/pull later. I have ran into this. Or did you use a centralized, canonical (therefore not distributed) Git server with a pull request model? If you do the latter, you won’t run into the issue but you also aren’t using the distributed part of a distributed version control system (DVCS)--& most don’t since has too many issues with snapshot-based tools. This restricts the sorts of systems & team structures for source control we can even do (you need a Tvoralds dictator even for Linux’s mailing list) & we can’t really think outside the snapshot-limitations until we step outside of that snapshot bubble.
No, evangelical as in needing to tell people about it, even when they have no interest.
No.
https://feddit.uk/comment/8692603
You literally asked what I suggested. And I’m trying to do my due diligence in raising awareness for ideas I find compelling since these alternatives have yet to be any many folks’ radars …VCSs that solve issues you have yet to run into, but might someday & now you might remember you once heard about a solution online.