Marvin's Blog【程式人生】

Ability will never catch up with the demand for it

21 Jun 2018

Fossil:基于SQLite又用于SQLite的DVCS

今天要给大家介绍Fossil,它是一款分布式版本管理工具(DVCS)。Fossil的作者是D. Richard Hipp,你可能对他不太熟悉,但是你一定听过他的另外一个作品:SQLite。准确得说Fossil是D. Richard Hipp开发的用来管理SQLite源代码的一款版本管理工具。

Fossil其实从诞生到现在有一定年头了,从A comparison of the key features in DVCS tools可以看出,它比Git和Mercurial晚一年,在2006出现。这三者的出现的前后关系应该是,Mercurial出现最早;然后Linus试用了Mercurial,觉得不理想,于是创造了Git;然后Fossil的作者觉得Git不理想,于是创造了Fossil。

Fossil的优点

一站式配置管理

Fossil的特色在于,它不仅管理源代码,还自带Wiki,Issue Tracker等功能,是一款一站式的软件配置管理工具。Fossil的官网就是一个很好的例子。可以把Fossil看成一个简易的Github,方便个人项目管理。

自带Wiki和Issue Tracker

作为一站式的配置管理软件,当然不能少了Wiki和Issue Tracker了。Fossil集成Wiki和Issue Tracker,用来记录文档和跟踪问题,而且自带Web界面,用来管理一个小型的项目绰绰有余。Wiki和Issue Tracker的内容也是被列为管理对象,在Fossile仓库中进行版本管理的。

单个可执行文件

Fossil只有一个可执行文件,体积小安装方便。一剑在手天下我有,同样一个可执行文件,即可以做客户端,又可以做服务端。

基于SQLite数据库

Fossil采用SQLite数据库来存在文件内容、版本信息等数据,这样做的好处是所有的信息都集中在少数的几个SQLite数据库文件中。而不像Git和Mercurial那样,数据分散存储在细碎的文件中,散落在文件系统中到处都是,导致一些管理上的麻烦。

双向版本历史

由于采用了SQLite数据库,Fossil可以把一些重要的信息缓存在数据库中方便访问。比如在Fossil中,可以很容易找到某个commit的父子commit。而在Git里面,找父commit容易,但是找子commit比较困难。

自动同步

Fossil支持自动同步,本地的改动可以自动同步到远程仓库中去。不像Git,每次在本地提交完commit,都要执行push命令推送到远程仓库。按Fossil作者的话说,虽然是分布式版本管理,但是Fossil支持以前CVS、SVN时代的““cathedral”的集中式开发模式。

Fossil的缺点

当然Fossil也有不少缺点

  • 虽然有Web界面。但是没有好用的GUI界面
  • 在线托管服务缺乏。像Git有Github、Gitlab和Bitbucket等托管服务;但是Fossil的就比较少了,可以看到的只有http://chiselapp.com/。
  • 可扩展性较差。虽然把所有的功能集成在一个可执行文件里面会显得比较方便,但是这样一来也导致扩展性问题。增加一些新功能会比较麻烦,需要重新编译这个可执行文件。这一点没有Git方便,像Git的话,只要写一两个Bash脚本就能扩展现有功能。

总结

总的来说,Fossil还是给我们带来一些启发的:

  • 一站式服务,自给自足,减少外部依赖性。
  • 基于数据库,而不是文件系统,可以利用数据的相关功能来方便呈现信息。

参考连接

(完)