In a discussion about VCS's on #bzr, I proposed the following axis in which a VCS's underpinning can vary:
* core data for a commit: snapshot | changeset | 'semantic patch'
* commit identifiers: content hash | namespace + sequence | pseudo-random | human assigned
* file location mapping: Unique ids | history analysis | None
We can then categorise systems (I apologise in advance for any errors in classification, please feel free to correct me :):
CVS: snapshot | namespace+sequence | none
git: snapshot | hash | none
svn: snapshot |namespace + sequence | history-analysis
darcs: semantic patch | human assigned | history-analysis
Arch: changeset | namespace | unique-id
bzr = snapshot | pseudo-random | unique-id
monotone = snapshot | hash | history-analysis
etc.
One can also consider what a semantic patch | pseudo random | unique-id using system would be like :)
Update: This has spawned the following wiki page
