用 Git 作為聊天應用的後端

Seth Kenlon發表於2019-09-15

GIC 是一個聊天應用程式的原型,展示了一種使用 Git 的新方法。

Git 是一個少有的能將如此多的現代計算封裝到一個程式之中的應用程式,它可以用作許多其他應用程式的計算引擎。雖然它以跟蹤軟體開發中的原始碼更改而聞名,但它還有許多其他用途,可以讓你的生活更輕鬆、更有條理。在這個 Git 系列中,我們將分享七種鮮為人知的使用 Git 的方法。

今天我們來看看 GIC,它是一個基於 Git 的聊天應用。

初識 GIC

雖然 Git 的作者們可能期望會為 Git 建立前端,但毫無疑問他們從未預料到 Git 會成為某種後端,如聊天客戶端的後端。然而,這正是開發人員 Ephi Gabay 用他的實驗性的概念驗證應用 GIC 所做的事情:用 Node.js 編寫的聊天客戶端,使用 Git 作為其後端資料庫。

GIC 並沒有打算用於生產用途。這純粹是一種程式設計練習,但它證明了開源技術的靈活性。令人驚訝的是,除了 Node 庫和 Git 本身,該客戶端只包含 300 行程式碼。這是這個聊天客戶端和開源所反映出來的最好的地方之一:建立在現有工作基礎上的能力。眼見為實,你應該自己親自來了解一下 GIC。

架設起來

GIC 使用 Git 作為引擎,因此你需要一個空的 Git 儲存庫為聊天室和記錄器提供服務。儲存庫可以託管在任何地方,只要你和需要訪問聊天服務的人可以訪問該儲存庫就行。例如,你可以在 GitLab 等免費 Git 託管服務上設定 Git 儲存庫,並授予聊天使用者對該 Git 儲存庫的貢獻者訪問許可權。(他們必須能夠提交到儲存庫,因為每個聊天訊息都是一個文字的提交。)

如果你自己託管,請建立一箇中心化的裸儲存庫。聊天中的每個使用者必須在裸儲存庫所在的伺服器上擁有一個帳戶。你可以使用如 GitoliteGitea 這樣的 Git 託管軟體建立特定於 Git 的帳戶,或者你可以在伺服器上為他們提供個人使用者帳戶,可以使用 git-shell 來限制他們只能訪問 Git。

自託管例項的效能最好。無論你是自己託管還是使用託管服務,你建立的 Git 儲存庫都必須具有一個活躍分支,否則 GIC 將無法在使用者聊天時進行提交,因為沒有 Git HEAD。確保分支初始化和活躍的最簡單方法是在建立儲存庫時提交 README 或許可證檔案。如果你沒有這樣做,你可以在事後建立並提交一個:

$ echo "chat logs" > README
$ git add README
$ git commit -m 'just creating a HEAD ref'
$ git push -u origin HEAD

安裝 GIC

由於 GIC 基於 Git 並使用 Node.js 編寫,因此必須首先安裝 Git、Node.js 和 Node 包管理器npm(它應該與 Node 捆綁在一起)。安裝它們的命令因 Linux 或 BSD 發行版而異,這是 Fedora 上的一個示例命令:

$ sudo dnf install git nodejs

如果你沒有執行 Linux 或 BSD,請按照 git-scm.comnodejs.org 上的安裝說明進行操作。

因此,GIC 沒有安裝過程。每個使用者(在此示例中為 Alice 和 Bob)必須將儲存庫克隆到其硬碟驅動器:

$ git clone https://github.com/ephigabay/GIC GIC

將目錄更改為 GIC 目錄並使用 npm 安裝 Node.js 依賴項:

$ cd GIC
$ npm install

等待 Node 模組下載並安裝。

配置 GIC

GIC 唯一需要的配置是 Git 聊天儲存庫的位置。編輯 config.js 檔案:

module.exports = {
  gitRepo: 'seth@example.com:/home/gitchat/chatdemo.git',
  messageCheckInterval: 500,
  branchesCheckInterval: 5000
};

在嘗試 GIC 之前測試你與 Git 儲存庫的連線,以確保你的配置是正確的:

$ git clone --quiet seth@example.com:/home/gitchat/chatdemo.git > /dev/null

假設你沒有收到任何錯誤,就可以開始聊天了。

用 Git 聊天

在 GIC 目錄中啟動聊天客戶端:

$ npm start

客戶端首次啟動時,必須克隆聊天儲存庫。由於它幾乎是一個空的儲存庫,因此不會花費很長時間。輸入你的訊息,然後按Enter鍵傳送訊息。

GIC

基於 Git 的聊天客戶端。 他們接下來會怎麼想?

正如問候訊息所說,Git 中的分支在 GIC 中就是聊天室或頻道。無法在 GIC 的 UI 中建立新分支,但如果你在另一個終端會話或 Web UI 中建立一個分支,它將立即顯示在 GIC 中。將一些 IRC 式的命令加到 GIC 中並不需要太多工作。

聊了一會兒之後,可以看看你的 Git 儲存庫。由於聊天發生在 Git 中,因此儲存庫本身也是聊天日誌:

$ git log --pretty=format:"%p %cn %s"
4387984 Seth Kenlon Hey Chani, did you submit a talk for All Things Open this year?
36369bb Chani No I didn't get a chance. Did you?
[...]

退出 GIC

Vim 以來,還沒有一個應用程式像 GIC 那麼難以退出。你看,沒有辦法停止 GIC。它會一直執行,直到它被殺死。當你準備停止 GIC 時,開啟另一個終端選項卡或視窗併發出以下命令:

$ kill `pgrep npm`

GIC 是一個新奇的事物。這是一個很好的例子,說明開源生態系統如何鼓勵和促進創造力和探索,並挑戰我們從不同角度審視應用程式。嘗試下 GIC,也許它會給你一些思路。至少,它可以讓你與 Git 度過一個下午。


via: https://opensource.com/article/19/4/git-based-chat

作者:Seth Kenlon 選題:lujun9972 譯者:wxy 校對:wxy

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

用 Git 作為聊天應用的後端

訂閱“Linux 中國”官方小程式來檢視

相關文章