用 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中國 榮譽推出

相關文章
相關標籤/搜索