用 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 存儲庫的貢獻者訪問許可權。(他們必須能夠提交到存儲庫,因為每個聊天消息都是一個文本的提交。)
如果你自己託管,請創建一個中心化的裸存儲庫。聊天中的每個用戶必須在裸存儲庫所在的伺服器上擁有一個帳戶。你可以使用如 Gitolite 或 Gitea 這樣的 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.com 和 nodejs.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
客戶端首次啟動時,必須克隆聊天存儲庫。由於它幾乎是一個空的存儲庫,因此不會花費很長時間。輸入你的消息,然後按回車鍵發送消息。
![GIC](/data/attachment/album/201909/15/100928gb4iykuyezrkayie.jpg "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
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive