版本控制系统技术演进史,从SCCS到Git(23)

技术实现

和Git一样 , Mercurial是一个分布式版本控制系统 , 它允许任何数量的开发人员独立于其他人使用他们自己的项目副本 。 Mercurial利用了许多与Git相同的技术 , 例如压缩和SHA-1哈希 , 但是采用了不同的方式 。

当提交新文件以在Mercurial中进行跟踪时 , 将在隐藏目录.hg/store/data/中为其创建相应的revlog文件 。 可以将revlog(或修订日志)文件看作是较旧的VCS(如CVS , RCS和SCCS)使用的历史记录文件的现代化版本 。 与Git为每个暂存文件的每个版本创建一个新的Blob不同 , Mercurial只是在该文件的revlog中创建一个新条目 。 为了节省空间 , 每个新条目仅包含先前版本的增量(更改) 。 一旦达到阈值数量的增量 , 将再次存储文件的完整快照 。 在应用许多增量来重建特定文件修订版时 , 这减少了查找时间 。

这些文件修订日志的名称与它们跟踪的文件匹配 , 但是后缀为.i和.d扩展名 。 .d文件包含压缩的增量内容 。 .i文件用作索引 , 以快速跟踪.d文件中的不同修订版本 。

Mercurial使用了另一种类型的修订日志 , 称为变更日志 。 更改日志包含条目列表 , 这些条目将每个提交与以下信息相关联:

推荐阅读