As someone who has lived in Git for the past decade, I also fail to see why Git is a crappy design. It's easy to distribute, works well, and there's nothing wrong with a tarball server.
Exactly. While the article is good about events history, it doesn't go deep enough into the feature evolution (which is tightly connected to and reflects the evolution of the software development). Which is :
TeamWare - somewhat easy branching (by copying whole workspace from the parent and the bringover/putback of the changes, good merge tool), the history is local, partial commits.
BitKeeper added distributed mode, changesets.
Git added very easy branching, stash, etc.
Any other currently available source control usually is missing at least one of those features. Very illustrative is the case of Mercurial which emerged at about the same time responding to the same need for the modern source control at the time, yet was missing partial commits for example and had much cumbersome branching (like no local history or something like this - i looked at it last more than a decade ago) - that really allowed it to be used only in very strict/stuffy settings, for everybody else it was a non starter.
Git is terrible at branching, constantly squashing and rebasing is not a feature but an annoyance. see fossil for how to do proper branching/merging/logging, by its very nature, Not to mention that by having the repository separate from the data, it forces you to organize it in a nice way (Mine look like Project/(repo.fossil, branch1/ branch2/ branch3/) You can achieve this with git now but I never had to think about it in fossil, its a natural consequence of the design.
>constantly squashing and rebasing is not a feature but an annoyance
it is a feature which allows, for example, to work simultaneously on several releases, patches, hot fixes, etc. Once better alternative emerges we'll jump the git ship as we did before when we jumped onto the git ship.
>the repository separate from the data
that was a feature of a bunch of source controls and a reason among others why they lost to git.
>it forces you to
that is another reason why source controls lose to git as git isn't forcing some narrow way of doing things upon you.
I don't deny of course that for some people/teams/projects other source controls work better as you comment illustrates. I'm just saying why git won and keeps the majority of situations.
> Once better alternative emerges we'll jump the git ship as we did before when we jumped onto the git ship.
It's not that easy at this point in time. git carries a lot of momentum, especially in combination with GitHub.
Anybody learning about software development learns about git and GitHub.
Software is expected to be in GitHub.
At the time git became successful there were arguably better systems like mercurial and now we got fossil, but git's shortcomings are too little of a pain point compared to universal knowledge about it and integration into every tool (any editor, any CI system, any package manager, ...) and process.
>It's not that easy at this point in time. git carries a lot of momentum, especially in combination with GitHub.
CVS back then was like this too, including public repos, etc.
>At the time git became successful there were arguably better systems like mercurial
I specifically mentioned Mercurial above because they both emerged pretty simultaneously responding to the same challenges, and Mercurial happened to be just inferior due to its design choices. Companies were jumping onto it too, for example our management back then chose it, and it was a predictable huge pain in the neck, and some years down the road it was replaced with git.
> CVS back then was like this too, including public repos, etc.
Not really.
CVS had too many flaws (no atomicity, no proper branching, no good offline work, etc.) Subversion as "natural successor" fixed some things and was eating some parts of CVS.
At the same time sourceforge, the GitHub of that time, started to alienate their users.
And then enterprises used different tools to way larger degree (VSS, sccs, Bk, perforce, whatever) while that market basically doesn't exist anymore these days and git is ubiquitous.
And many people went way longer without any version control than today. Today kids learn git fundamentals very early, even on Windows and make it a habit. Where's in the early 2000s I saw many "professional" developers where the only versioning was the ".bak" or ".old" file or copies of the source directory.
People started paying me to develop software in 1986. First time I ever used version control software was 1996. It was TERRIBLE. Two years later I left to start my own software company, but my experience with it to that point was so bad I went without version control the first few years. Around 2002 I started using CVS (or RCS? long time ago!) and quickly switched to Subversion. After learning git to work on Raku circa 2009, I switched my main $WORK repo to git in maybe 2012. Every repo I've created since then has been in git, but I still haven't moved all my svn repos over to git.
> it is a feature which allows, for example, to work simultaneously on several releases, patches, hot fixes, etc. Once better alternative emerges we'll jump the git ship as we did before when we jumped onto the git ship.
What are you talking about here? I'm not talking about eliminating branching, but the fact that merging a branch is usually just a fake single commit that hides away the complexity and decisions of the branch. see [0] into how you can leverage branches and the log for a sane commit history.
> that was a feature of a bunch of source controls and a reason among others why they lost to git.
Given the article, git won because it was foss, torvalds and speed, if you have proof of a good amount of people saying "I hate the division of data and repository!" then its a believable claim, or maybe you're confusing the data/repo division with cvs? git also didn't have to fight much, the only contender was hg