I'll quote brainbag who replied to my comment:
> On the other hand, the internals of git are elegant and simple, and if you start by teaching from the inside out, it makes it far easier to understand why and when we use certain commands.
It doesn't take much to understand Git internals. I teach it over a short hour to students. And the gift of this mental model will save them hours and days of frustration shadow-boxing a tool they don't really understand later.
I know because I was that student once and I know because I have seen the trouble junior programmers get into when they wield a tool without knowledge.
> What better way is there to explain that than using primitives like cp etc?
These are not real primitives. These are commands that are a part of your parlance. This is what I mean by replacing one set of assumptions with another.
> The point of git is to do version control.
You do this a lot in your article: commit, version control, working directory, are put up early. There's a level of assumed knowledge that straddles somewhere between a novice Linux sysadmin and a complete beginner.