The World Before Git
osshistory.org
osshistory.org
Git's LFS/annexe extensions are serviceable for developers and technical folks but really are subpar compared to a centralized version control options.
I'm one of those weirdos who actually likes git LFS, but only because I admit all it's short comings. But it is working really well for my game dev project. Not what I use to manage my asset library though. It is what I use to sync the most up to date binary files, which is really the use case it is maintained for anyway (think syncing build artifacts or large data sets).
I am planning an overhaul in a bit. I looked into sun, but would probably rather use git lfs honestly. There are also options for uncompressed files to be stored as text, but it doesn't seem like you can get away from binary data completely. I haven't tried to hard to focus on it yet. It is somewhat frustrating that there isn't a clearly good free option.
The start of my career was in the pro audio industry, where "copy and rename" mixing session project files is still a common practice:
{songTitle}_final_rev2-2021.08.03-FINAL-MIX.ptx
VCS working on text files allowing deltas/diffs helps a lot in this sense, versus saving binary project files where diffs/merges make little sense and can corrupt the output.Diffs and merges with binary files can work just fine. Look at rsync as an example. The problem is that it can take... too... much... time. Text is easy to diff because we can simplify the problem down to lines separated by `[\r]\n`. Being able to split a large text file into individual lines to delta is a much easier problem.
Binary data is much more difficult. So the problem isn't corrupting an output file, but just how much time it can take to figure out the most efficient way to delta a file. Because of this time limit, it makes the workflow of revision control too unwieldy.
https://martinvonz.github.io/jj/v0.12.0/
You can squash your working copy into the previous commit with one command. All these things, to the uninitiated, probably don’t sound like much. All I can say is the UX is much more attuned to the way I work. Much quicker and more intuitive. It is exactly how I would build a vcs if I needed to and knew how.
I also like that it is built in rust. Since the vcs is really just a big data structure, I feel like rust is a good choice because of how it forces correct code to some degree and doesn’t allow cycles, etc.
Clearcase was awesome and terrible at the same time. Being able to version directories was somewhat novel then, so that was nice. Config specs - what a cool idea. Felt like a bunch of folks who had worked on filesystems/NFS asked themselves "hey what if we made a filesystem that could give a window into a VCS?". So cool, so compelling and yet so many devils in those details. At the time, things like clearmake and derived objects had such tremendous potential.
What got people to switch to Git (arguably, worst UX among them, but fastest for most operations) was GitHub combined with the rising popularity of Linux. But mostly GitHub.
Git came along with great merge support and the entire world loved it.
Before that it was SVN (open source, decent) and tools like IBM Clearcase (not good, file locking, etc)
Perforce was very easy to use and honestly git was a step backwards on a overall usability.
Perforce is still easier to use than Git.
It’s a shame that VCS software has stagnated on Git.
Now I'm ruined, again.
I dislike git for many reasons, but to get people to change is going to take a big "thing" that git cannot do. Incremental improvements are not going to justify the switching cost.
Git essentially automated patch file management, but the hard problem of incompatible changes is just as hard today.
It was also much more difficult to figure out changes across multiple files with a single low-resolution (800 x 600 at the time, I think) monitor on a computer that could barely keep a few files open simultaneously.
Another big pain point was spending an hour or more downloading a patch (via dialup) only to realize that you needed other patches or files before you could actually start working on anything, or that you'd downloaded the wrong file, etc.
So there were many little inconveniences that added up to make it tremendously painful (in my memories) compared to today's experiences.
Again, that's unrelated to "patch management": I am not disputing we have better experience overall today, but none of that is due to git.
Bazaar, Bazaar-NG, Codeville, Darcs, Monotone
Git and Mercurial used ideas from a few of them and made them faster and more usable. For git it helped that there was a large project primed to switch to a new VCS.
https://dwheeler.com/essays/scm.html is another good source from that period
(disclosure I helped with Monotone a bit)
It was UI based, hit a button and it would make a zip of just the files that had changed, along side an xml manifest of all files, their hash, permissions and metadata. Every so many commits it would make a full backup.
Worked really well, even built a visual difftool and history explorer - IMHO nicer than most git UIs these days.
No mechanism for branches or working with other devs but it worked really well for a small team working on a shared SMB server in 2007.
Thought about trying to commercialize it but git took off and I fell in love. Wrote a tool that converted that history to git and never looked back.
The fact that the overwhelming majority of users prefer central workflows isn't a bad thing about Git.