Git vocabulary is workflow-based, i.e. "what we usually do". Unfortunately, the language grew so complex there is always a probability of messing things up. This is the same problem e.g. C++ has: too many constructs, they interact in unexpected ways => bang!<p>So the idea here is to define actual operations that happen to the tree. Those are a bit more complicated than the vanilla blob/tree/commit model, but still manageable. The operations are orthogonal, plus we isolate concerns into different URI parts (also orthogonal).<p>Overall, it all decomposes cleanly and uniformly. Workflow-based vocabulary becomes unnecessary (and a bit confusing) once you grasp that basic underlying model of orthogonal operations/concerns. Some parts still need work though, e.g. conveying the state of the tree in the most precise manner.