瞭解一下 Fossil,一個 Git 的替代品

Fossil 是一個集版本控制系統、bug 追蹤、維基、論壇以及文檔解決方案於一體的系統。

每個開發者都知道,追蹤代碼的修改是至關重要的。有時候你會處於好奇或者教育的目的需要展示你的項目開始和進化的歷史。有時候你想讓其他的開發者參與到你的項目中,因此你需要一種值得信賴的能合併不同代碼分支的方法。更極端一點,有時候你爲了解決一個問題而修改的代碼導致已有的功能不能正常使用。

Fossil 源碼管理系統是由著名的 SQLite 數據庫的作者開發的一個集版本控制系統、bug 追蹤、維基、論壇以及文檔解決方案於一體的系統。

安裝 Fossil

Fossil 是一個獨立的 C 程序,因此你可以從它的網站上下載後放在環境變量 PATH 中的任意位置。例如,假定 /usr/local/bin 已經在你的環境變量中(默認情況下是在的):

$ wget https://fossil-scm.org/home/uv/fossil-linux-x64-X.Y.tar.gz
$ sudo tar xvf fossil-linux-x64-X.Y.tar.gz --directory /usr/local/bin

你也可以通過包管理器從軟件倉庫中找到 Fossil,或者直接從源碼編譯。

創建一個 Fossil 倉庫

如果你已經有一個代碼項目,想用 Fossil 來追蹤,那麼第一步就是創建一個 Fossil 倉庫:

$ fossil init myproject.fossil
project-id: 010836ac6112fefb0b015702152d447c8c1d8604
server-id:  54d837e9dc938ba1caa56d31b99c35a4c9627f44
admin-user: klaatu (initial password is "14b605")

創建 Fossil 倉庫的過程中會返回三行信息:一個唯一的項目 ID、一個唯一的服務器 ID 以及管理員 ID 和密碼。項目 ID 和服務器 ID 是版本數字。管理員憑證表明你對這個倉庫的所有權,當你把 Fossil 作爲服務器讓其他用戶來訪問時可以使用管理員權限。

Fossil 倉庫工作流

在你使用 Fossil 倉庫之前,你需要先爲它的數據創建一個工作路徑。你可以把這個過程類比爲使用 Python 時創建一個虛擬環境或者解壓一個只用來備份的 ZIP 文件。

創建一個工作目錄並進入:

$ mkdir myprojectdir
$ cd myprojectdir

把你的 Fossil 打開到剛剛創建的目錄:

$ fossil open ../myproject
project-name: <unnamed>
repository:   /home/klaatu/myprojectdir/../myproject
local-root:   /home/klaatu/myprojectdir/
config-db:    /home/klaatu/.fossil
project-code: 010836ac6112fefb0b015702152d447c8c1d8604
checkout:     9e6cd96dd675544c58a246520ad58cdd460d1559 2020-11-09 04:09:35 UTC
tags:         trunk
comment:      initial empty check-in (user: klaatu)
check-ins:    1

你可能注意到了,Fossil 在你的家目錄下創建了一個名爲 .fossil 的隱藏文件,用來追蹤你的全局 Fossil 配置。這個配置不是隻適用於你的一個項目的;這個文件只會在你第一次使用 Fossil 時生成。

添加文件

使用 add 和 commit 子命令來向你的倉庫添加文件。例如,創建一個簡單的 README 文件,把它添加到倉庫:

$ echo "My first Fossil project" > README
$ fossil add README
ADDED  README
$ fossil commit -m 'My first commit'
New_Version: 2472a43acd11c93d08314e852dedfc6a476403695e44f47061607e4e90ad01aa

使用分支

Fossil 倉庫開始時默認使用的主分支名爲 trunk。當你想修改代碼而又不影響主幹代碼時,你可以從 trunk 分支切走。創建新分支需要使用 branch 子命令,這個命令需要兩個參數:一個新分支的名字,一個新分支的基分支名字。在本例中,只有一個分支 trunk,因此嘗試創建一個名爲 dev 的新分支:

$ fossil branch --help
Usage: fossil branch new BRANCH-NAME BASIS ?OPTIONS?
$ fossil branch new dev trunk
New branch: cb90e9c6f23a9c98e0c3656d7e18d320fa52e666700b12b5ebbc4674a0703695

你已經創建了一個新分支,但是你當前所在的分支仍然是 trunk

$ fossil branch current
trunk

使用 checkout 命令切換到你的新分支 dev

$ fossil checkout dev
dev

合併修改

假設你在 dev 分支中添加了一個新文件,完成了測試,現在想把它合併到 trunk。這個過程叫做合併

首先,切回目標分支(本例中目標分支爲 trunk):

$ fossil checkout trunk
trunk
$ ls
README

這個分支中沒有你的新文件(或者你對其他文件的修改),而那些內容是合併的過程需要的信息:

$ fossil merge dev
 "fossil undo" is available to undo changes to the working checkout.
$ ls
myfile.lua  README

查看 Fossil 時間線

使用 timeline 選項來查看倉庫的歷史。這個命令列出了你的倉庫的所有活動的詳細信息,包括用來表示每次修改的哈希值、每次提交時填寫的信息以及提交者:

$ fossil timeline
=== 2020-11-09 ===
06:24:16 [5ef06e668b] added exciting new file (user: klaatu tags: dev)
06:11:19 [cb90e9c6f2] Create new branch named "dev" (user: klaatu tags: dev)
06:08:09 [a2bb73e4a3] *CURRENT* some additions were made (user: klaatu tags: trunk)
06:00:47 [2472a43acd] This is my first commit. (user: klaatu tags: trunk)
04:09:35 [9e6cd96dd6] initial empty check-in (user: klaatu tags: trunk)
+++ no more data (5) +++

Fossil UI

公開你的 Fossil 倉庫

因爲 Fossil 有個內置的 web 界面,所以 Fossil 不像 GitLab 和 Gitea 那樣需要主機服務。Fossil 就是它自己的主機服務,只要你把它放在一臺機器上就行了。在你公開你的 Fossil 倉庫之前,你還需要通過 web 用戶界面(UI)來配置一些信息:

使用 ui 子命令啓動一個本地的實例:

$ pwd
/home/klaatu/myprojectdir/
$ fossil ui

“Users” 和 “Settings” 是安全相關的,“Configuration” 是項目屬性相關的(包括一個合適的標題)。web 界面不僅僅是一個方便的功能。 它是能在生產環境中使用並作爲 Fossil 項目的宿主機來使用的。它還有一些其他的高級選項,比如用戶管理(或者叫自我管理)、在同一個服務器上與其他的 Fossil 倉庫進行單點登錄(SSO)。

當配置完成後,關掉 web 界面並按下 Ctrl+C 來停止 UI 引擎。像提交代碼一樣提交你的 web 修改。

$ fossil commit -m 'web ui updates'
New_Version: 11fe7f2855a3246c303df00ec725d0fca526fa0b83fa67c95db92283e8273c60

現在你可以配置你的 Fossil 服務器了。

  1. 把你的 Fossil 倉庫(本例中是 myproject.fossil)複製到服務器,你只需要這一個文件。
  2. 如果你的服務器沒有安裝 Fossil,就在你的服務器上安裝 Fossil。在服務器上安裝的過程跟在本地一樣。
  3. 在你的 cgi-bin 目錄下(或它對應的目錄,這取決於你的 HTTP 守護進程)創建一個名爲 repo_myproject.cgi 的文件:
#!/usr/local/bin/fossil
repository: /home/klaatu/public_html/myproject.fossil

添加可執行權限:

$ chmod +x repo_myproject.cgi

你需要做的都已經做完了。現在可以通過互聯網訪問你的項目了。

你可以通過 CGI 腳本來訪問 web UI,例如 https://example.com/cgi-bin/repo_myproject.cgi

你也可以通過命令行來進行交互:

$ fossil clone https://[email protected]/cgi-bin/repo_myproject.cgi

在本地的克隆倉庫中工作時,你需要使用 push 子命令把本地的修改推送到遠程的倉庫,使用 pull 子命令把遠程的修改拉取到本地倉庫:

$ fossil push https://[email protected]/cgi-bin/repo_myproject.cgi

使用 Fossil 作爲獨立的託管

Fossil 將大量的權力交到了你的手中(以及你的合作者的手中),讓你不再依賴託管服務。本文只是簡單的介紹了基本概念。你的代碼項目還會用到很多有用的 Fossil 功能。嘗試一下 Fossil。它不僅會改變你對版本控制的理解;它會讓你不再考慮其他的版本控制系統。


via: https://opensource.com/article/20/11/fossil

作者:Klaatu 選題:lujun9972 譯者:lxbwolf 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章