Top
Best
New

Posted by c17r 12 hours ago

The future of version control(bramcohen.com)
412 points | 239 commentspage 6
monster_truck 9 hours ago|
Not this again
KPGv2 4 hours ago||
I've tested out jj a bit, and doesn't it solve the issues presented at the link already? I don't work on a team where I need VC better than git, so I just stick with it for my own private use, but I did test jj out of curiosity, and I could've sworn this is basically the same pitch as switching to jj (but for the CRDT under the hood).
philwelch 4 hours ago||
Regardless of the merits of CRDT's, I'm just glad someone is finally trying to create a new version control system. Everyone loves to complain about Git but nobody's actually tried to move beyond it in two decades.
MattCruikshank 8 hours ago||
For anyone who thinks diff / merge should be better - try Beyond Compare from Scooter Software.
csomar 2 hours ago||
I am working on merge conflicts tool[1], so this area is of interest to me. But I fail to see the points of the author. In the first example he gave, git will actually give you three blobs: our, their and ancestor. The ancestor should have the missing information from his example and using code diffs[2], you can see what happened at each blob. Essentially, his blob is a single view of the 3 blobs merged together. Could be useful on the terminal, but if you are using a visual tool, a 3-way diff is always better.

> merges never fail

I am not sure what never fail means here.

> Conflicts are informative, not blocking. The merge always produces a result.

What does this even mean? You merge first and review later? And then other contributor just build on top of your main branch as you decided you want to change your selection?

If you want a smarter merge conflict tool, the one I am enthusiastic about today is Mergiraf: https://codeberg.org/mergiraf/mergiraf

1: https://codeinput.com/products/merge-conflicts 2: https://codeinput.com/products/merge-conflicts/demo

EGreg 7 hours ago||
I remember I met Bram Cohen (of Bittorent fame!) around 15 years ago. Around that time is when I had started building web-based distributed collaborative systems, starting with Qbix.com and then spun off a company to build blockchain-based smart contracts through Intercoin.org etc.

Anyway, I wanted to suggest a radical idea based on my experience:

Merges are the wrong primitive.

What organizations (whethr centralized or distributed projects) might actually need is:

1) Graph Database - of Streams and Relations

2) Governance per Stream - eg ACLs

A code base should be automatically turned into a graph database (functions calling other functions, accessing configs etc) so we know exactly what affects what.

The concept of what is “too near” each other mentioned in the article is not necessarily what leads to conflicts. Conflicts actually happen due to conflicting graph topology and propagating changes.

People should be able to clone some stream (with permission) and each stream (node in the graph) can be versioned.

Forking should happen into workspaces. Workspaces can be GOVERNED. Publishing some version of a stream just means relating it to your stream. Some people might publish one version, others another.

Rebasing is a first-class primitive, rather than a form of merging. A merge is an extremely privileged operation from a governance point of view, where some actor can just “push” (or “merge”) thousands of commits. The more commits, the more chance of conflicts.

The same problem occurs with CRDTs. I like CRDTs, but reconciling a big netsplit will result in merging strategies that create lots of unintended semantic side effects.

Instead, what if each individual stream was guarded by policies, there was a rate limit of changes, and people / AIs rejected most proposals. But occasionally they allow it with M of N sign offs.

Think of chatgpt chats that are used to modify evolving artifacts. People and bots working together. The artifacts are streams. And yes, this can even be done for codebases. It isnt about how “near” things are in a file. Rather it is about whether there is a conflict on a graph. When I modify a specific function or variable, the system knows all of its callers downstream. This is true for many other things besides coding too. We can also have AI workflows running 24/7 to try out experiments as a swarm in sandboxes, generate tests and commit the results that pass. But ultimately, each organization determines whether they want to rebase their stream relations to the next version of something or not.

That is what I’m building now with https://safebots.ai

PS: if anyone is interested in this kind of stuff, feel free to schedule a calendly meeting w me on that site. I just got started recently, but I’m dogfooding my own setup and using AI swarms which accelerates the work tremendously.

lowbloodsugar 8 hours ago||
Araxis merge. Four views. Theirs, ours, base and “what you did so far in this damned merge hell”.
yalvhe2009 2 hours ago|
[dead]
More comments...