这篇文章主要简单的介绍下fossil
的简单用法
什么是fossil
-
fossil
是另一种分布式版本控制系统。和Git
一样,它维护了一份变更记录,不管开发者是否能够访问主仓库。 -
和
Git
不同的是,fossil
支持自动同步(auto-sync)
模式,在远程仓库可用的时候能够自动推送提交。如果在提交的时候无法访问远程仓库,fossil
会保存变更,直到下次能够访问。 -
fossil
仓库是以单个SQLite
数据库的形式实现的,而不像Git
那样采用的是一组目录。fossil
应用本身包含了如Web
界面、故障报告表系统以及wiki
,而Git
是采用附加程序的形式来实现这些服务的。
简单用法
安装
sudo apt-get install fossil
新建仓库数据库文件
这里的仓库数据库就类似于我们git init
一个空的需要跟踪的仓库的时候生成的.git
文件或者是svn
的.svn
文件。新建一个仓库数据库文件的命令:
fossil new xxx.fossil
fossil init xxx.fossil
fossil new
和 fossil init
命令功能相同,使用的时候任选其一即可,两者都会使用指定名称创建一个空的仓库数据库。 .fossil
后缀并非强制性的,不过这算是一个惯例。
以我自己的电脑为例,在~
主目录下创建了一个fossil_test.fossil
仓库数据库文件
打开要被跟踪的工作目录
数据库文件有了,这时候就需要有一个被跟踪的工作目录,比如我新建一个fossil_test
文件夹,准备用来做测试。
mkdir fossil_test
现在理清楚一下,我们的数据库跟工作目录的路径关系
~
├── fossil_test.fossil
├── fossil_test
├── xxx
ok,是兄弟关系,这时候进入工作目录,并在工作目录下打开数据库文件,这个过程结束后,数据库文件fossil_test.fossil
就会开始跟踪fossil_test
这个工作目录了。
cd fossil_test
fossil open ../fossil_test.fossil
跟踪 提交 UI界面
首先我们在fossil_test
中创建一个空文件夹test
(后面做测试会用到),以及一个文本文件example.txt
mkdir test
echo 'example' > example.txt
然后跟踪这个example.txt
并且提交,这里的命令就类似于我们的git add
跟git commit
了。
还可以在图中看到example.txt
显示已经被跟踪
这个时候fossil status
一下,也类似于git status
的作用
然后最最神奇的地方是fossil
可以提供一个Web
界面(包括配置、故障报告表管理、wiki、图像化提交历史等)。
输入命令
fossil ui
fossil ui
命令会启动一个http
服务器并将本地浏览器连接到该服务器上,默认监听端口为tcp 8080
。这个过程并不需要联网,完全就是本地上的一个操作。
如果想要修改监听的端口,可以采用如下的命令(改为了80
)
fossil ui -P 80
其他
fossil status
这个命令跟git status
稍微不一样的地方在于,如果我们没有去指定跟踪某个文件,这时候git status
会探测出哪些文件没有被跟踪,比如这样
而对于fossil
,现在我们新建立了一个还未跟踪的文件,用fossil status
命令并没有像上面那样显示出来
fossil add
之后就有新文件的状态了
fossil add *
一般我们在工作目录下的文件(除了二进制文件等,后续再提)都是需要被跟踪的,git
有git add --all
,而
fossil
可以fossil add *
比如我现在新建了两个文件test1.txt
跟test2.txt
然后再fossil add *
第二次提交
注意:fossil
跟git
一样,也是不跟踪空的文件夹,但是如果当前目录下的文件夹非空,fossil add *
就会跟踪非空的文件夹
.fossil数据库文件
比如我们只拿到一个.git
文件,没有其他文件,那么我们可以通过git log
得到某次commit id
,通过git reset --hard commit_id
就可以恢复原来的文件内容。跟git
一样,fossil
也是一种分布式版本控制系统。所以如果拿到我们的数据库文件也可以恢复整个文件的内容。
注意:.svn
文件不行,因为svn
是集中式版本控制系统,需要能跟svn
服务器建立起通信才能恢复。
## 后续
这次先简单的介绍下fossil
的简单用法,后续在探究其他命令,比如浏览器的配置,将仓库公开,在嵌入式设备上搭建fossil
环境等。
参考
- 《Linux+Shell脚本攻略-中文-目录-文字版-第3版 》
- 链接