Git 是少数能够将如此多的现代计算技术封装到一个程序中的应用程序之一,以至于它最终成为许多其他应用程序的计算引擎。虽然它最出名的是跟踪软件开发中的源代码更改,但它还有许多其他用途,可以使您的生活更轻松、更有条理。在 Git 成立 14 周年(4 月 7 日)之前的这个系列中,我们将分享七种鲜为人知的 Git 用途。今天,我们将看看 SparkleShare,它使用 Git 作为文件共享的骨干。
用于文件共享的 Git
Git 的优点之一是它本质上是分布式的。它生来就是为了共享。即使您只是在您自己的网络上的其他计算机上共享存储库,Git 也会使从共享位置获取文件的行为变得透明。
作为界面而言,Git 非常简单。它因用户而异,但坐下来完成一些工作时的常用咒语只是 git pull,或者可能是稍微复杂的 git pull && git checkout -b my-branch。尽管如此,对于某些人来说,在计算机上输入命令 的想法仍然令人困惑或麻烦。计算机的目的是让生活更轻松,计算机擅长重复性任务,因此有更简单的方法可以使用 Git 共享文件。
SparkleShare
SparkleShare 项目是一个基于 Git 的跨平台、开源、Dropbox 风格的文件共享应用程序。它自动化了所有 Git 命令,通过将文件拖放到专门指定的 SparkleShare 目录中的简单操作来触发添加、提交、推送和拉取过程。由于它基于 Git,您可以获得快速的、基于差异的推送和拉取,并且您继承了 Git 版本控制和后端基础设施(如 Git 钩子)的所有好处。它可以完全自托管,或者您可以将其与 Git 托管服务(如 GitLab、GitHub、Bitbucket 等)一起使用。此外,因为它基本上只是 Git 的前端,您可以在可能没有 SparkleShare 客户端但有 Git 客户端的设备上访问您的 SparkleShare 文件。
正如您获得 Git 的所有好处一样,您也获得所有常见的 Git 限制:使用 SparkleShare 存储数百张照片、音乐和视频是不切实际的,因为 Git 是为文本设计和优化的。Git 当然有能力存储大型二进制数据文件,但它旨在跟踪历史记录,因此一旦将文件添加到其中,几乎不可能完全删除它。这在一定程度上限制了 SparkleShare 对某些人的用处,但它使其非常适合许多工作流程,包括 日历。
安装 SparkleShare
SparkleShare 是跨平台的,其 网站 提供 Windows 和 Mac 的安装程序。对于 Linux,您的软件安装程序中有一个 Flatpak,或者您可以在终端中运行以下命令
$ sudo flatpak remote-add flathub https://flathub.org/repo/flathub.flatpakrepo
$ sudo flatpak install flathub org.sparkleshare.SparkleShare
创建 Git 仓库
SparkleShare 不是软件即服务 (SaaS)。您在计算机上运行 SparkleShare 以与 Git 仓库通信——SparkleShare 不存储您的数据。如果您还没有 Git 仓库来同步文件夹,则必须在启动 SparkleShare 之前创建一个。您有三个选项:托管 Git、自托管 Git 或自托管 SparkleShare。
Git 托管
SparkleShare 可以使用您可以访问的任何 Git 仓库进行存储,因此如果您拥有或创建了 GitLab 或任何其他托管服务的帐户,它就可以成为您的 SparkleShare 的后端。例如,开源 Notabug.org 服务是一个像 GitHub 和 GitLab 这样的 Git 托管服务,但它足够独特,可以证明 SparkleShare 的灵活性。创建新仓库因主机而异,具体取决于用户界面,但所有主要主机都遵循相同的通用模型。
首先,在您的托管服务中找到创建新项目或仓库的按钮,然后单击它开始。然后逐步完成仓库创建过程,为您的仓库提供名称、隐私级别(仓库通常默认为公开)以及是否使用 README 文件初始化仓库。无论您是否需要 README,都启用初始 README 文件。使用文件启动仓库不是绝对必要的,但它会强制 Git 主机在仓库中实例化一个 master 分支,这有助于确保像 SparkleShare 这样的前端应用程序有一个分支可以提交和推送。对于您来说,看到一个文件也很有用,即使它是一个几乎为空的 README 文件,以确认您已连接。

创建仓库后,获取它用于 SSH 克隆的 URL。您可以像任何人获取 Git 项目的任何 URL 一样获取此 URL:导航到仓库页面并查找 Clone 按钮或字段。


这是 SparkleShare 用于访问您的数据的地址,因此请记下它。您的 Git 仓库现已配置完成。
自托管 Git
您可以使用 SparkleShare 访问您有权访问的任何计算机上的 Git 仓库。除了裸 Git 仓库外,无需特殊设置。但是,如果您想向任何其他人授予对您的 Git 仓库的访问权限,那么您应该运行像 Gitolite 或 SparkleShare 自己的 Dazzle 服务器这样的 Git 管理器,以帮助您管理 SSH 密钥和帐户。至少,创建一个专门用于 Git 的用户,以便有权访问您的 Git 仓库的用户也不会自动获得对您的服务器其余部分的访问权限。
以 Git 用户身份(或者您自己,如果您非常擅长管理用户和组权限)登录到您的服务器并创建一个仓库
$ mkdir ~/sparkly.git
$ cd ~/sparkly.git
$ git init --bare .
您的 Git 仓库现已配置完成。
Dazzle
SparkleShare 的开发人员提供了一个名为 Dazzle 的 Git 管理系统,以帮助您自托管 Git 仓库。
在您的服务器上,将 Dazzle 应用程序下载到您路径中的某个位置
$ curl https://raw.githubusercontent.com/hbons/Dazzle/master/dazzle.sh \
--output ~/bin/dazzle
$ chmod +x ~/bin/dazzle
Dazzle 设置了一个专门用于 Git 和 SparkleShare 的用户,并且还根据 SparkleShare 应用程序生成的密钥实施访问权限。现在,只需设置一个项目
$ dazzle create sparkly
您的服务器现在已配置为 SparkleShare 主机。
配置 SparkleShare
当您首次启动 SparkleShare 时,系统会提示您配置您希望 SparkleShare 使用哪个服务器进行存储。此过程可能感觉像是首次运行设置向导,但它实际上是在 SparkleShare 中设置新共享位置的常用过程。与许多共享驱动器应用程序不同,使用 SparkleShare,您可以同时配置多个位置。您配置的第一个共享位置并不比您以后可能设置的任何共享位置更重要,并且您没有注册 SparkleShare 或任何其他服务。您只是将 SparkleShare 指向 Git 仓库,以便它知道将您的第一个 SparkleShare 文件夹与什么保持同步。
在第一个屏幕上,通过您希望在 SparkleShare 代表您进行的 Git 提交中记录的任何方式来标识您自己。您可以使用任何内容,甚至是解析为虚假的虚假信息。它纯粹用于提交消息,如果您对查看 Git 后端流程不感兴趣,您甚至可能永远不会看到这些消息。
下一个屏幕提示您选择您的托管类型。如果您使用的是 GitLab、GitHub、Planio 或 Bitbucket,请选择相应的选项。对于其他任何情况,请选择 自有服务器。

在此屏幕底部,您必须输入 SSH 克隆 URL。如果您是自托管,则地址类似于 ssh://username@example.com,远程路径是您为此目的创建的 Git 仓库的绝对路径。
根据我上面的自托管示例,我的虚构服务器的地址是 ssh://git@example.com:22122(:22122 表示非标准 SSH 端口),远程路径是 /home/git/sparkly.git。
如果我改用我的 Notabug.org 帐户,则上面示例中的地址为 git@notabug.org,路径为 seth/sparkly.git。
SparkleShare 首次尝试连接到主机时会失败,因为您尚未将 SparkleShare 客户端 ID(特定于 SparkleShare 应用程序的 SSH 密钥)复制到 Git 主机。这是预期的,所以不要取消该过程。保持 SparkleShare 设置窗口打开,并从系统托盘中的 SparkleShare 图标中获取客户端 ID。然后将客户端 ID 复制到剪贴板,以便您可以将其添加到您的 Git 主机。

将您的客户端 ID 添加到托管 Git 帐户
除了细微的 UI 差异外,添加 SSH 密钥(客户端 ID 就是一个 SSH 密钥)在任何托管服务上基本上都是相同的过程。在您的 Git 主机的 Web 仪表板中,导航到您的用户设置并找到 SSH 密钥 类别。单击 添加新密钥 按钮(或类似的按钮)并粘贴您的 SparkleShare 客户端 ID 的内容。

保存密钥。如果您希望其他人(例如协作者或家人)能够访问同一个仓库,他们必须向您提供他们的 SparkleShare 客户端 ID,以便您可以将其添加到您的帐户。
将您的客户端 ID 添加到自托管 Git 帐户
SparkleShare 客户端 ID 只是一个 SSH 密钥,因此将其复制并粘贴到您的 Git 用户的 ~/.ssh/authorized_keys 文件中。
使用 Dazzle 添加您的客户端 ID
如果您使用 Dazzle 来管理您的 SparkleShare 项目,请使用以下命令添加客户端 ID
$ dazzle link
当 Dazzle 提示您输入 ID 时,粘贴在 SparkleShare 菜单中找到的客户端 ID。
使用 SparkleShare
将您的客户端 ID 添加到您的 Git 主机后,单击 SparkleShare 窗口中的 重试 按钮以完成设置。克隆您的仓库完成后,您可以关闭 SparkleShare 设置窗口,您会在您的主目录中找到一个新的 SparkleShare 文件夹。如果您使用托管服务设置了 Git 仓库并选择包含 README 或许可证文件,您可以在您的 SparkleShare 目录中看到它们。

否则,有一些隐藏目录,您可以通过在文件管理器中显示隐藏目录来查看它们。

您使用 SparkleShare 的方式与使用计算机上的任何目录的方式相同:将文件放入其中。每当将文件或目录放入 SparkleShare 文件夹时,它都会在后台复制到您的 Git 仓库。
排除特定文件
由于 Git 旨在记住所有内容,因此您可能希望排除特定文件类型,使其永远不会被记录。管理排除的文件有几个原因。通过定义 SparkleShare 禁止的文件,您可以避免意外复制大型文件。您还可以为自己设计一个方案,使您能够将逻辑上属于一起的文件(例如 MIDI 文件及其 .flac 导出文件)存储在一个目录中,但手动备份大型文件,同时让 SparkleShare 备份基于文本的文件。
如果您在系统的文件管理器中看不到隐藏文件,请显示它们。导航到您的 SparkleShare 文件夹,然后导航到代表您的仓库的目录,找到一个名为 .gitignore 的文件,并在文本编辑器中打开它。您可以将文件扩展名或文件名(每行一个)输入到 .gitignore 中,任何与您列出的内容匹配的文件都将被(顾名思义)忽略。
Thumbs.db
$RECYCLE.BIN/
.DS_Store
._*
.fseventsd
.Spotlight-V100
.Trashes
.directory
.Trash-*
*.wav
*.ogg
*.flac
*.mp3
*.m4a
*.opus
*.jpg
*.png
*.mp4
*.mov
*.mkv
*.avi
*.pdf
*.djvu
*.epub
*.od{s,t}
*.cbz
您知道您最常遇到的文件类型,因此请专注于最有可能偷偷溜进您的 SparkleShare 目录的文件类型。如果您想稍微过度使用,您可以在 Notabug.org 以及整个互联网上找到优秀的 .gitignore 文件集合。
在您的 .gitignore 文件中添加这些条目后,您可以将您不想发送到 Git 主机的大型文件放在您的 SparkleShare 目录中,SparkleShare 将完全忽略它们。当然,这意味着您有责任确保它们通过其他方式备份或分发给您的 SparkleShare 协作者。
自动化
自动化 是我们与计算机达成的沉默协议的一部分:它们完成我们人类要么不擅长做,要么不擅长记住的重复性、无聊的事情。SparkleShare 是一种很好、简单的方法来自动化数据的日常分发。它绝不适用于每个 Git 仓库。它没有用于高级 Git 功能的界面;它没有暂停按钮或手动覆盖。这没关系,因为它的范围是故意限制的。SparkleShare 完成 SparkleShare 旨在完成的事情,它做得很好,而且这是一个您无需考虑的 Git 仓库。
如果您需要这种稳定、无形的自动化,请尝试一下 SparkleShare。
2 条评论