使用 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 仓库的贡献者访问权限。 (他们必须能够向仓库进行提交,因为每条聊天消息都是一个字面意义上的提交。)

如果您自己托管,请创建一个集中位置的裸仓库。 聊天中的每个用户都必须在裸仓库所在的服务器上拥有一个帐户。 您可以使用 Git 托管软件(例如 GitoliteGitea)创建特定于 Git 的帐户,或者您可以为他们提供服务器上的单独用户帐户,可能使用 git-shell 来限制他们对 Git 的访问。

在自托管实例上性能最佳。 无论您是自己托管还是使用托管服务,您创建的 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 中。 向 GIC 补丁一些 IRC 风格的命令并不难。

聊了一段时间后,看看你的 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 服务器。

你引起了我的注意! 我以前从未听说过 isomorphic-git。 我会看看的,谢谢你的提示!

回复 作者 William Hilton (未验证)

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.