用 Git 来共享文件

SparkleShare 是一个开源的基于 Git 的 Dropbox 风格的文件共享应用程序。在咱们的系列文章中了解有关 Git 不为人知的用法。前端

Git 是一个少有的能将如此多的现代计算封装到一个程序之中的应用程序,它能够用做许多其余应用程序的计算引擎。虽然它以跟踪软件开发中的源代码更改而闻名,但它还有许多其余用途,可让你的生活更轻松、更有条理。在这个 Git 系列中,咱们将分享七种不为人知的使用 Git 的方法。linux

今天,咱们将看看 SparkleShare,它使用 Git 做为文件共享的基础。git

用于文件共享的 Git

Git 的优势之一是它具备固有的分发能力。它可用来创建共享。即便你只是与本身网络上的其余计算机共享资源库,Git 也会为从共享位置获取文件的行为带来透明性。github

随着其界面的发展,Git 变得很是简单。虽然因用户而异,他们坐下来完成一些工做时的共同点仅仅是 git pull 或稍微复杂一点的 git pull && git checkout -b my-branch。可是,对于某些人来讲,将命令输入到他们的计算机中的作法彻底是使人困惑或烦恼的。计算机旨在使生活变得轻松,它擅长于重复性工做,所以有更简便的方法能够与 Git 共享文件。后端

SparkleShare

SparkleShare 项目是一个基于 Git 的跨平台的、开源的 Dropbox 式的文件共享应用程序。它经过将文件拖放到专门指定的 SparkleShare 目录中的简单操做,自动执行全部 Git 命令,触发添加、提交、推送和拉取过程。由于它基于 Git,因此你能够得到基于差别(diff)的快速推送和拉取,而且继承了 Git 版本控制和后端基础设施(如 Git 挂钩)的全部优势。它能够彻底自托管,也能够将其与 GitLab、GitHub、Bitbucket 等 Git 托管服务一块儿使用。此外,因为它基本上只是一个 Git 的前端,所以你能够在可能没有 SparkleShare 客户端但有 Git 客户端的设备上访问 SparkleShare 中的文件。bash

正如你得到 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。ssh

托管的 Git

SparkleShare 可使用你能访问的任何 Git 存储库进行存储,所以,若是你拥有 GitLab 或任何其余托管服务的账户(或建立一个),则它能够成为 SparkleShare 的后端。例如,开源 Notabug.org 服务是一个相似于 GitHub 和 GitLab 的 Git 托管服务,但其独特性足以证实 SparkleShare 的灵活性。根据用户界面的不一样,不一样的托管服务建立新存储库的方法也有所不一样,可是全部主要存储库都遵循相同的通用模型。curl

首先,在托管服务中找到建立新项目或存储库的按钮,单击它以开始。而后逐步完成存储库的建立过程,为存储库提供名称、隐私级别(存储库一般默认为公共),以及是否使用 README 文件初始化存储库。不管你是否须要个 README 文件,请初始化创建一个。使用一个文件来建立存储库不是绝对必要的,可是它会强制 Git 主机实例化存储库中的 master 分支,这有助于确保前端应用程序(例如 SparkleShare)具备要提交并推送的分支。即便文件是几乎空的 README 文件,也能够用来查看该文件以确认你已链接成功。

Creating a Git repository
Creating a Git repository

建立存储库后,获取其用于 SSH 克隆的 URL。就像从 Git 项目得到其 URL 同样,你也能够获取此 URL:导航至存储库页面并查找 “Clone” 按钮或字段。

Cloning a URL on GitHub
Cloning a URL on GitHub

GitHub 的克隆 URL。

Cloning a URL on GitLab
Cloning a URL on GitLab

GitLab 的克隆 URL。

这是 SparkleShare 用于获取数据的地址,所以请记下它。你的 Git 存储库现已配置好。

自托管的 Git

你可使用 SparkleShare 访问你有权访问的任何计算机上的 Git 存储库。除了一个 Git 裸存储库外,无需任何特殊设置。可是,若是你想将对 Git 存储库的访问权授予其余任何人,则应运行 Gitolite 之类的 Git 管理器或 SparkleShare 本身的 Dazzle 服务器来帮助你管理 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,则能够选择一个适当的。不然,请选择“本身的服务器”。

Choosing a Sparkleshare host
Choosing a Sparkleshare host

在此屏幕底部,你必须输入 SSH 的克隆 URL。若是你是自托管的 Git,则地址相似于 <ssh://username@example.com>,而远程路径是为此目的而建立的 Git 存储库的绝对路径。

根据上面的自托管示例,我虚构的服务器的地址为 ssh://git@example.com:22122:22122 表示一个非标准的 SSH 端口),远程路径为 /home/git/sparkly.git

若是我改用 Notabug.org 账户,则上例中的地址为 ssh://git@notabug.org,路径为 seth/sparkly.git

SparkleShare 首次尝试链接到主机时会失败,由于你还没有将 SparkleShare 客户端 ID(特定于 SparkleShare 应用程序的 SSH 密钥)复制到 Git 主机。这是预料之中的,因此不要取消该过程。将 SparkleShare 设置窗口保持打开状态,并从系统任务栏中的 SparkleShare 图标处获取客户端 ID。而后将客户端 ID 复制到剪贴板,以即可以将其添加到 Git 主机。

Getting the client ID from Sparkleshare
Getting the client ID from Sparkleshare

将你的客户端 ID 添加到托管的 Git 账户

除了较小的 UI 差别外,在任何托管服务上添加 SSH 密钥(全部客户端 ID 都是这样)的过程基本上是相同的。在你的 Git 主机的 Web 仪表板中,导航到你的用户设置,而后找到 “SSH 密钥”类别。单击“添加新密钥”按钮(或相似按钮),而后粘贴你的 SparkleShare 客户端 ID 的内容。

Adding an SSH key
Adding an SSH key

保存密钥。若是你但愿其余人(例如协做者或家庭成员)可以访问同一存储库,则他们必须向你提供其 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 file manager
Sparkleshare file manager

此外,有一些隐藏目录,你能够经过在文件管理器中显示隐藏目录来查看。

Showing hidden files in GNOME
Showing hidden files in GNOME

使用 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 能够完成它计划要作的事情,它作得很好,并且它是你无需关心的一个 Git 存储库。

若是你想使用这种稳定的、看不见的自动化,请尝试一下 SparkleShare。


via: opensource.com/article/19/…

做者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关文章
相关标签/搜索