使用 Git 作为聊天应用的后端

GIC 是一个原型聊天应用程序,展示了一种使用 Git 的新颖方式。
142 位读者喜欢这篇文章。
Team communication, chat

Git 是少数几个能够将现代计算的许多方面封装到一个程序中的应用程序之一,以至于它最终成为许多其他应用程序的计算引擎。虽然它最出名的是跟踪软件开发中的源代码更改,但它还有许多其他用途,可以使您的生活更轻松、更有条理。在 Git 4 月 7 日迎来 14 周年纪念日之前的这个系列中,我们将分享七种鲜为人知的使用 Git 的方法。今天,我们将了解 GIC,一个基于 Git 的聊天应用程序

认识 GIC

虽然 Git 的作者可能期望为 Git 创建前端,但他们无疑从未想到 Git 会成为例如聊天客户端的后端。然而,这正是开发者 Ephi Gabay 用他的实验性概念验证 GIC 所做的事情:一个用 Node.js 编写的聊天客户端,使用 Git 作为其后端数据库。

GIC 绝非旨在用于生产环境。它纯粹是一个编程练习,但它展示了开源技术的灵活性。令人惊讶的是,该客户端仅包含 300 行代码,不包括 Node 库和 Git 本身。这就是这个聊天客户端和开源的最佳之处之一;能够在前人的工作基础上进行构建。眼见为实,所以您应该亲自了解一下 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 共度下午时光的好借口。

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时从事这两个行业。

4 条评论

其中一个命令中有一个错字。“git cone” 应该是 “git clone”。

如果能将它移植到 isomorphic-git 就太棒了。这样它就可以直接在浏览器中运行,而无需 Node 服务器。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.