Git 是少数几个能够将现代计算的众多方面封装到一个程序中的应用程序之一,以至于它最终成为许多其他应用程序的计算引擎。虽然它最出名的是在软件开发中跟踪源代码更改,但它还有许多其他用途,可以让您的生活更轻松、更有条理。在本系列文章中,在 Git 4 月 7 日的 14 周年纪念日到来之际,我们将分享七种鲜为人知的使用 Git 的方法。今天,我们将看看 GIC,一个基于 Git 的聊天应用程序
认识 GIC
虽然 Git 的作者可能预料到会为 Git 创建前端,但他们无疑从未预料到 Git 会成为聊天客户端等应用的后端。然而,这正是开发者 Ephi Gabay 在他的实验性概念验证项目 GIC 中所做的事情:一个使用 Git 作为其后端数据库的、用 Node.js 编写的聊天客户端。
GIC 绝非旨在用于生产环境。它纯粹是一个编程练习,但它展示了开源技术的灵活性。令人惊讶的是,该客户端仅由 300 行代码组成,不包括 Node 库和 Git 本身。而这正是聊天客户端和开源的最佳优点之一:能够在前人的工作基础上进行构建。眼见为实,所以您应该亲自了解一下 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
当客户端首次启动时,它必须克隆聊天仓库。由于它几乎是一个空仓库,因此不会花费很长时间。键入您的消息并按 Enter 键发送消息。

一个基于 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 共度下午时光的好借口。
4 条评论