看到一篇文章,重新又勾起了我对版本控制工具的回忆和兴趣,拿出最好用的两种来比较比较吧:git和hg 。
1.对象模型(Object Model)
hg是采用增量式存储的版本控制系统,它保存相邻版本间的差异,通过在基础版本之上叠加差别的方式记录版本的更新,其组织方式自然采用链表。这点和subversion一致,数据库版本控制工具dbdeploy也采用相同原理。
hg中的基本对象有三种:file、manifest 和changeset
- changeset可以理解为版本的代名词了,它记录了该版本的信息,changeset间的采用链式索引,由一个根开始;
- 每一个changeset持有对应版本的manifest,这是一个记录repo内当前工程版本下的各文件版本信息的列表;
- 每个file对应的Revlog 文件才是真正存储各版本以及其数据节点的列表。
git并非采用增量式存储,而是为每个版本创建一个快照,最重要的组织结果是树。
基本对象有三种,自底向上为:blob、tree和commit(还有个tag, 和hg的bookmark类似,略了 )
- blob存储的是repo中某文件的内容&#x