git got the data model really right, and the user space really wrong. The data model is more important than the user space.
This is the first project I've seen which appears to understand and respect /how/ and /why/ the git data model is so elegant.
git got the data model really right, and the user space really wrong. The data model is more important than the user space.
This is the first project I've seen which appears to understand and respect /how/ and /why/ the git data model is so elegant.
With a version-based model, how you compare them is determined by the user space, whether that's merges, or viewing history. Even compression isn't all that fundamental to much of anything; it's possible to implement underneath the system, eliminating whatever redundancy you want. With patch-based systems, all of that comes baked into the underlying representation.
On a deeper level, this feeds into how git can be distributed, robust, yet very simple.
It'd be possible to write a really good user space around the git data model if someone had the time and inclination.
My personal gripes:
* I like to commit every time I change a few lines of code. To have a clean version history, git requires me to rebase all of those commits. I'd like to have "major" and "minor" commits, which the git data model can support in several different ways (as a list, a tree, or DAG; I prefer the tree model). The user space makes anything like this incredibly painful. It encourages rewriting history, which is actually rather bad.
* Large files are managed very, very badly. It's ironic since the git data model is ideal for things with large files.
* Related, partial trees aren't really supported. This gives scaling issues. In many cases, I just want to work with a few files, or just the latest commit. Some of this is technically possible but practically painful enough to be not worthwhile.
* Nested projects / submodules.
Of those, only submodules might require changes to the underlying data model.
For those interested in the different perspectives on how to weigh those priorities, I recommend starting here: