8 ms·
Darcs, Friendly Version Control
- quesera 2y agoI miss darcs very much. Easily my favorite VCS ever. I did not love building the binary from Haskell sources. The ghc compiler was awkward and slow at the time. I did not love the exponential time explosion for complicated (in practice, just "large") patch histories. Both of those problems were 20 years ago though. Is the world a better place now?
- gavinhoward 2y agoIf you loved darcs, check out Pijul. They solved the exponential problem with first-class conflicts. Disclaimer: I am making a competitor to Pijul, but Pijul really is the spiritual successor to darcs.
- leonheld 2y agoSadly my only experience with Pijul was this https://github.com/Eugeny/russh/issues/151 https://github.com/Eugeny/russh/issues/151. When one of the key guys behind the VCS says things like "especially when the alternative is something as broken as Git" about other control systems I really don't feel like using said tool.
- gavinhoward 2y agoI can see your point. This is a good reminder to me that I need to control my tongue as well; I have said things like the Pijul author did in that thread, and I need to do better.
- kstrauser 2y agoThat’s a classy reply.
- kstrauser 2y agoI can’t still edit that comment to explain, but I meant it sincerely. When someone sees a foible of their own in others and moves to correct it, that’s awesome and commendable.
- gavinhoward 2y agoYeah, I don't know why you were downvoted. I upvoted you because I was sure you were replying to me sincerely.
- kstrauser 2y agoEh, you never can tell. I assume someone thought I was being sarcastic. I don't care if someone downvotes me, but I'd hope it'd be because I'd genuinely said something dumb or unkind.
- nmz 2y agoLinus called cvs/subversion broken, did you stop using git?
- leonheld 2y agoI was like 4 years old when git was released, so I'm unaware of any of this. Sorry.
- nmz 2y agoWell he didn't really call cvs/subversion broken, to semi quote, he basically said that subversion people were trying to improve on cvs and you cannot do that because cvs is inherently broken. Its not damning to call something broken, plenty of software has bugs that make it unusable and are broken to many people. In fact, many tools have been made in anger at other tools not doing what you want them to do. This is just the software inception cycle. You should be allowed to be angry at the brokenness of software... its what allows improvement.
- adastra22 2y agoI like the idea of Pijul, not the implantation (so far). What are you building and where can I get it?
- gavinhoward 2y agoIt is not ready yet, sorry!
- networked 2y agoProbably a good idea to have a place where those who are interested can wait for an update. You can create a mailing list or a GitHub repository that one can star or watch today. (Later, you could use the repository to mirror the source code of your VCS.)
- gavinhoward 2y agoYou are absolutely right. To be honest, though, I don't want to even mirror that repo on GitHub. Not doing so means I don't have to agree on their onerous T&C for that code. I was planning on streaming my work on Twitch once I truly get started. I was hoping that might be a goid place for updates.
- adastra22 2y agoWhat is onerous about GitHub’s ToS?
- gavinhoward 2y agoThey could arbitrarily decide that I am a persona non grata and lock me out. They claim rights above what FOSS licenses allow, and I do not want that. I do not want my code to end up in their LLMs. Yes, I have blocked them from my self-hosted forge too.
- blurbleblurble 2y agoI wonder if you're open to making something that can double as a p2p data store for collaborative p2p applications, including web apps? That was always my wish for pijul, that I could use it in this way.
- gavinhoward 2y agoMine will allow cloning all data, including issues, PRs, and real-time chats (Zulip-style). I think that might cover your bases.
- blurbleblurble 2y agoDo you mean that your system will have some built-in collaboration features? Sounds pretty cool. I'm curious to understand if the underlying patch data structure functionality will be usable as a library to build custom stuff on top?
- gavinhoward 2y ago> Do you mean that your system will have some built-in collaboration features? Yes. [1] But that is only chat/discussions. In the future, Yore might get real-time collaboration like Google Docs, but that depends on it taking off. > I'm curious to understand if the underlying data structure functionality will be usable as a library. Yes. [2] [1]: https://git.yzena.com/Yzena/Yc/src/branch/master/docs/yore/design.md#discussionschat https://git.yzena.com/Yzena/Yc/src/branch/master/docs/yore/d... [2]: https://git.yzena.com/Yzena/Yc/src/branch/master/docs/yore/design.md#library https://git.yzena.com/Yzena/Yc/src/branch/master/docs/yore/d...
- JTyQZSnP3cQGa8B 2y ago> Is the world a better place now? Don't ask me because the only SCM I have been using for the past 15 year is git and I hate it. Every company uses it, I made a lot of PowerPoint presentations to teach people how to use it, yet I refuse to use its command-line. I switched from SourceSafe/SVN/Mercurial to git, but never used Darcs. IMHO git is fine as an assembly language of SCM, but I'm trying to switch to jujutsu which has a better CLI while staying compatible with git as a backend.
- quesera 2y agoMy path was cvs -> svn -> arch -> darcs -> hg -> git I liked arch. I loved darcs, but it blew up on me. I liked hg, but it was clear that git was going to win, so I capitulated. Honestly, the worst thing I can say about git is that it's always good enough. Yes, the CLUI has historically been a dog's breakfast. It seems like some slow improvements are being made, which is great, probably -- I haven't learned them. But once you get past that mostly-psychological barrier, or if you bypass it completely with a GUI etc, the underlying technology is solid and reliable. I postulate that VCS is "finished" and that any new tool will need to use git underneath for wide adoption. I hope I'm wrong and someone more creative than I can make me love a VCS again. :)
- simonmic 2y agoYou may be right, and I think jujutsu or a fork of it is the most likely contender.
- hvenev 2y agoI think git is quite nice and easy to work with once you realize one thing: git is first and foremost a filesystem. Version control is built on top.
- James_K 2y agoIt seems odd that they boast about being patch based, given that the original advantage of git was that it uses snapshots instead of diffs as previous VCs did.
- kgwgk 2y ago"In our dependency graph you can also see that all our changes concerning the files A and B are totally independent from each other. So I could pull only the changes concerning B from the repository while ignoring the changes regarding A altogether. This is an incredibly powerful mechanism that snapshot based version control systems do not have. Now you can pull in a set of patches and ignore all those that don’t depend on the change you are currently interested in. Other version control systems like git for example call this cherry picking, but compared to darcs they are suffering from some short comings. In those version control system you re-record the patch when you cherry pick it. That means that its whole identity changes, one way in which this manifests is that it will get a different hash. So even though it’s the exact same change the patches are now different. This can become quite annoying when working in a distributed setting, with darcs this is a complete non-issue."
- ltbarcly3 2y agoThe probability of working software resulting from this operation is approximately 0.
- hsenag 2y agoEven if previous VCSes (edit: other than Darcs) used diffs internally to store changes efficiently, they were still inherently snapshot based. I think Git's advantage was mainly from using Merkle trees rather than specifically that it was snapshot based.
- adastra22 2y agoTo be clear, darcs is neither diff nor snapshot based.
- beachy 2y agoDarcs to me is a bit like VHS vs betamax. A superior technology that did not win in the market due to other factors. Way back in the day we did some due diligence on our source control - at that time CVS - and settled on darcs as the most elegant. Around the same time Linus created git and the rest is history and eventually darcs went the way of betamax.
- ltbarcly3 2y agogit is the superior technology. If you weren't around back in the day, one of the big problems with version control was how SLOW it was. Changing branches on a moderate sized codebase in SVN took a long time, and SVN was considered quite fast. When we finally got git we couldn't believe it actually did something. Like you would change branches and it would instantly return, and you would scratch your head and double check that the files were different? It was the difference between 30s of your CPU grinding and 45ms. This was so completely frustrating that long before git became dominant we were all using git-svn so at least we wouldn't be forced to use SVN locally, because it was horrible. Darcs was 1000x worse than that. Darcs was never good enough, not even close. It wasn't even good. It fundamentally failed at the most basic thing required of version control, that you can actually use it to get work done, because it became so slow with even small codebases that you had to give up and switch to SVN. You could have a codebase with 200k lines of code and basic operations would take 30 MINUTES or longer. (not to mention that darcs would lose data, and you could get in situations where conflict resolution was impossible and you would just be stuck and forced to manually fix things outside of VC) https://en.wikipedia.org/wiki/Darcs#Shortcomings https://en.wikipedia.org/wiki/Darcs#Shortcomings Darcs was and still is unusable and inferior.
- beachy 2y ago1000x is a bit hyperbolic but I'll admit I had forgotten the purgatory of slow version control. You are correct about that.
- dan-robertson 2y agoDarcs has exponential time merges so there is definitely potential for getting in very slow situations.
- egl2020 2y agoI used and rather liked Darcs in the dark ages when SVN was the best alternative. Then I discovered that it would happily accept largish binary files, but would later refuse to give them back when I needed them. I could have lived with an error on check in.
- simonmic 2y agoSounds bad. Is that reproducible today I wonder.
- CountSessine 2y agoI used Darcs a long time ago and what I remember was that because it reordered patches, it was actually quite difficult to do a bisect to find a patch that broke a build. Unlike git where you can completely characterize a build with the HEAD sha, darcs didn’t really have that concept and it was very tricky to figure out what actually went into a particular build. It didn’t really seem to me at the time like this was an appropriate VCS for a team of developers using CI.
- CountSessine 2y agoMaybe they’ve fixed this since then. I haven’t looked at darcs in AGES.
- bitwize 2y agoUse Pijul instead. It uses the theory of patches from Darcs, does not have the exponential-merge corner case, and is written in Rust.
- mtndew4brkfst 2y agoI would say that jujutsu is at least as compelling as Pijul in conversations where either is valid to implement. Migrating off of Git cold-turkey is a high barrier for some, and jj lets you defer that requirement via high-quality interop.
- andrewl 2y agoWe moved from Subversion to Git a long time ago, and we’re fine with it. But we’re only 16 users, so I personally can’t speak to how well it works for much larger teams, although I know of course that it’s used by giant teams for giant projects. One of the advantages is that so many people know it. So even if the features and user experience were worse, it could still be the best choice because almost everybody you’ll need to hire will have experience with it. What I keep meaning to try is Fossil[1], built by the creators of SQLite. (And built on SQLite.) It’s not that we’re looking to replace Git. I’m just curious about the actual hands on experience. Has anybody here actually used it, as opposed to looked at it? [1] https://fossil-scm.org/ https://fossil-scm.org/
- spit2wind 2y agoI've been using Fossil for personal projects and love it. It's maybe best to think of Fossil as GitHub in a box. Fossil comes with a server that includes tickets, a wiki, and a live chat space in addition to the version control. I work on my phone on the bus, start the server (`fossil server`) in Termux when I get home, and then access that on my computer. The project is super well put together. It's so refreshing compared to the dumpster fire that is git. The commands make sense, the documentation (if even necessary) makes sense, and the code of Fossil itself is easy to compile and hack on. The community is nice, too. I really appreciate Dr. Hipp's approach to software.
- pyrolistical 2y agoSeems like darcs applies patches and diffs trees, whereas got applies patches and diffs commits. Trees don’t contain author or timestamps, unlike commits. This makes it easier to achieve “same state” by comparing trees.
- softinio 2y agoFor now: Give Jujutsu (https://jj-vcs.github.io/jj/latest/ https://jj-vcs.github.io/jj/latest/) a try, it's good whilst maintaining a level of compatibility with git which is good for gradual adoption and uptake. Avoid: Pijul. I doubt it will succeed in getting wide adoption. Some of the reasons already covered by others comments in this thread so don't want to repeat. Wish: I really wish darcs was rebooted and made a comeback. What can we do to make it happen? I heard a version 3 is a work in progress. I am also aware of this new initiative (GitHub equivalent but for darcs): https://smeder.ee https://smeder.ee