Nine years ago, I wrote Git is a Harrier Jump Jet. And not in a good way, then followed it up with Still hatin’ on git: now with added Actual Reasons! Both posts evidently resonated with a lot of people, but also attracted a lot of constructive disagreement.
Prodded by a new comment from MiB this morning, I found myself writing a response that I think is worth reproducing and amplifying here.
The problem with git is that it’s complex, and that is at least in part because it’s trying to solve a complex problem.
I don’t think anyone’s ever argued that complex problems must always necessarily have complex solutions — there is such a thing as cutting the Gordian Knot. But anything that’s complicated is that way due to a combination of two factors: the inherent complexity of the problem to be solved, and “wasted” complexity that is introduced by a suboptimal solution.
I started out thinking that git-as-solution-to-version-control was mostly the second kind of complexity. It certainly introduces some of that — not all its decisions are defensible — but I have increasingly come around to the perspective that most of the complexity is real, and inherent in the problem we’re trying to solve. That said, people who don’t need to solve the whole problem (multiple teams distributed in time and space, contributing potentially conflicting change-sets to a codebase that must both move forwards into new versions and maintain bugfix releases of older versions) then you don’t need the whole solution.
Git is far from perfect — there are still plenty of occasions when I get a checkout into a state I don’t understand, and end up having to take off and nuke the whole checkout from orbit. But it genuinely is very very powerful (especially when complemented by GitHub and similar tools), and when you need that kind of power it’s genuinely inevitable that you’re going to need to deal with some complexity, just as a food processor is more complex to use than a knife.
(And of course “This should be simple, we don’t need all this complexity, we should just get rid of it all” is exactly the kind of thinking got us Brexit and the current no-deal insanity.)