Git is a 4 handle, dual boiler espresso machine – when all they need is instant.Interestingly, I don’t think this trade-off is inherent in Git’s design.There is essentially no distinction between implementation detail and user interface.It’s understandable that an advanced user might need to know a little about how features are implemented, to grasp subtleties about various commands.A common response I get to complaints about Git’s command line complexity is that “you don’t need to use all those commands, you can use it like Subversion if that’s what you really want”. That’s like telling an old granny that the freeway isn’t scary, she can drive at 20kph in the left lane if she wants.Git doesn’t provide any useful subsets – every command soon requires another; even simple actions often require complex actions to undo or refine. Just rev to 6000, dump the clutch, and use wheel spin to get round the first corner.
), remote branches, tracking, namespaces Git doesn’t so much have a leaky abstraction as no abstraction.Someone could quite conceivably write an improved interface (easygit is a start) that hides unhelpful complexity such as the index and the local repository.The fundamental promise of any version control system is this: “Once you put your precious source code in here, it’s safe.The most spectacular example of this is the command “git am”, which as far as I can tell, is something Linus hacked up and forced into the main codebase to solve a problem he was having one night.It combines email reading with patch applying, and thus uses a different patch syntax (specifically, one with email headers at the top). They describe the commands from the perspective of a computer scientist, not a user.