今天要给大家介绍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还是给我们带来一些启发的:
- 一站式服务,自给自足,减少外部依赖性。
- 基于数据库,而不是文件系统,可以利用数据的相关功能来方便呈现信息。
参考连接
- Original author of Fossil here, with two comments:
- https://www.fossil-scm.org/xfer/doc/trunk/www/fossil-v-git.wiki
- Why SQLite Does Not Use Git (sqlite.org)
- Why I’m using Fossil SCM instead of other source control systems
- Goodbye Fossil
- Fossil - github-in-a-box (by SQLite creator)
- monotone documentation
(完)