fossil使用(一)

Posted by 婷 on November 13, 2021 本文总阅读量

这篇文章主要简单的介绍下fossil的简单用法

什么是fossil

  • fossil是另一种分布式版本控制系统。和Git一样,它维护了一份变更记录,不管开发者是否能够访问主仓库。

  • Git不同的是,fossil支持自动同步(auto-sync)模式,在远程仓库可用的时候能够自动推送提交。如果在提交的时候无法访问远程仓库,fossil会保存变更,直到下次能够访问。

  • fossil仓库是以单个SQLite数据库的形式实现的,而不像Git那样采用的是一组目录。fossil应用本身包含了如Web界面、故障报告表系统以及wiki,而Git是采用附加程序的形式来实现这些服务的。

简单用法

安装

sudo apt-get install fossil

image-20211107153314120

新建仓库数据库文件

这里的仓库数据库就类似于我们git init一个空的需要跟踪的仓库的时候生成的.git文件或者是svn.svn文件。新建一个仓库数据库文件的命令:

fossil new  xxx.fossil
fossil init   xxx.fossil

fossil new fossil init 命令功能相同,使用的时候任选其一即可,两者都会使用指定名称创建一个空的仓库数据库。 .fossil 后缀并非强制性的,不过这算是一个惯例。

以我自己的电脑为例,在~主目录下创建了一个fossil_test.fossil仓库数据库文件

image-20211107153409311

打开要被跟踪的工作目录

数据库文件有了,这时候就需要有一个被跟踪的工作目录,比如我新建一个fossil_test文件夹,准备用来做测试。

mkdir fossil_test

image-20211107153441731

现在理清楚一下,我们的数据库跟工作目录的路径关系

image-20211107162938300

~
├── fossil_test.fossil
├── fossil_test
├── xxx

ok,是兄弟关系,这时候进入工作目录,并在工作目录下打开数据库文件,这个过程结束后,数据库文件fossil_test.fossil就会开始跟踪fossil_test这个工作目录了。

cd fossil_test
fossil open ../fossil_test.fossil

image-20211107153517872

跟踪 提交 UI界面

首先我们在fossil_test中创建一个空文件夹test(后面做测试会用到),以及一个文本文件example.txt

mkdir test
echo 'example' > example.txt

image-20211107153619652

然后跟踪这个example.txt并且提交,这里的命令就类似于我们的git addgit commit了。

image-20211107160037488

还可以在图中看到example.txt显示已经被跟踪

这个时候fossil status一下,也类似于git status的作用

image-20211107160325177

然后最最神奇的地方是fossil可以提供一个Web界面(包括配置、故障报告表管理、wiki、图像化提交历史等)。

输入命令

fossil ui

fossil ui 命令会启动一个http服务器并将本地浏览器连接到该服务器上,默认监听端口为tcp 8080。这个过程并不需要联网,完全就是本地上的一个操作。

image-20211107155554514

如果想要修改监听的端口,可以采用如下的命令(改为了80)

fossil ui -P 80

其他

fossil status

这个命令跟git status稍微不一样的地方在于,如果我们没有去指定跟踪某个文件,这时候git status会探测出哪些文件没有被跟踪,比如这样

image-20211107162342968

image-20211107162418775

而对于fossil,现在我们新建立了一个还未跟踪的文件,用fossil status命令并没有像上面那样显示出来

image-20211107162552787

fossil add 之后就有新文件的状态了

image-20211107162746645

fossil add *

一般我们在工作目录下的文件(除了二进制文件等,后续再提)都是需要被跟踪的,gitgit add --all,而

fossil可以fossil add *

比如我现在新建了两个文件test1.txttest2.txt

image-20211107170850056

然后再fossil add *

image-20211107170953448

第二次提交

image-20211107171112849

注意:fossilgit一样,也是不跟踪空的文件夹,但是如果当前目录下的文件夹非空,fossil add *就会跟踪非空的文件夹

image-20211107171409101

image-20211107171523511

image-20211107171618389

image-20211107171653046

.fossil数据库文件

比如我们只拿到一个.git文件,没有其他文件,那么我们可以通过git log得到某次commit id,通过git reset --hard commit_id就可以恢复原来的文件内容。跟git一样,fossil也是一种分布式版本控制系统。所以如果拿到我们的数据库文件也可以恢复整个文件的内容。

注意:.svn文件不行,因为svn是集中式版本控制系统,需要能跟svn服务器建立起通信才能恢复。

## 后续

这次先简单的介绍下fossil的简单用法,后续在探究其他命令,比如浏览器的配置,将仓库公开,在嵌入式设备上搭建fossil环境等。

参考

  • 《Linux+Shell脚本攻略-中文-目录-文字版-第3版 》
  • 链接