Git LFS 入門指南

Git LFS 入門指南

出於好意:設計團隊開始把他們大尺寸的圖形文件添加到你的項目倉庫當中,然而引起的結果是,你看着倉庫不斷增大直到數 GB 大小......

在 GIT 中以二進制文件來運行確實是一種明智的做法,每當提交一個 100MB 的 Photoshop 文件中的細微改變,你倉庫的大小當然也會增長 100MB,這樣快速的增長會使你的倉庫因爲內容太過於龐大而變得幾乎無法使用。

但是,如果說不使用版本控制你的設計/概念/視頻/音頻/可執行文件/<other-large-file-use-case>工作也不能解決問題(知識庫過大)。一般來說,版本控制的好處還是存在的,而且應該用於各種各樣的項目當中去。

幸運的是,這有一個 GIT 擴展可以讓使用大型文件更加有效率,跟“Large File Storage”(或者叫"LFS",如果你喜歡這個簡稱)問個好吧。



沒有 LFS:臃腫的倉庫

在我們着眼於 LFS 如何創造奇蹟之前,我們先進一步看一個實際的問題,以簡單的網站項目爲例:

A simple project setup

如上圖所示,並沒什麼特別:一些 HTML,CSS 和 JS 文件和幾個小的圖像資源。然而,目前我們還沒有把我們的設計資源(Photoshop,Sketch,etc.)包括進來,把設計資源加入版本控制會使它更加有意義。

Big binary files in a project

然而,關鍵在於:每次我們的設計發生變化(無論多小),都會另外提交 100MB 到我們的倉庫中,很快,我們倉庫就會從 MB 變成 GB 了,這就會使克隆和複製編程異常冗長。

雖然我只討論了“設計”的文件,但它確實與所有"大"文件有關:如視頻,音頻記錄,數據集等的問題。


使用 LFS : 有效的處理大文件

當然,LFS 並不能像"變魔術一樣"處理所有的大型數據:它需要記錄並保存每一個變化。然而,這就把負擔轉移給了遠程服務器 - 允許本地倉庫保持相對的精簡。

爲了實現這個可能,LFS 耍了一個小把戲:它在本地倉庫中並不保留所有的文件版本,而是僅根據需要提供檢出版本中必需的文件。

但這引發了一個有意思的問題:如果這些龐大的文件本身沒有出現在你的本地倉庫中....改用什麼來代替呢? LFS 保存輕量級指針中有真實的文件數據。當你用一個這樣的指針去遷出一個修訂版時,LFS 會很輕易地找到源文件(不在他上面可能就在服務器上,特殊緩存)然後你下載就行了。

因此,你最終只會得到你真正想要的文件 - 而不是一些你可能永遠都不需要冗餘數據。



安裝 LFS

LFS 尚未加入 Git 的核心二進制文件,但是它可以作爲擴展使用。這意味着,使用之前我們需要提前安裝。

服務端

目前並不是所有主機服務器都支持 LFS。 但如果你是 GitLab 用戶就不必擔心。如果你使用 GitLab.com 或 GitLab CE 或 EE 的中間版本,它們已經支持LFS了! 您的管理員只需要開啓LFS選項

本地機器

你本地安裝的 Git 也需要支持 LFS。 如果你使用 Tower,一個 Git 桌面客戶端,你就不需要額外安裝了,因爲 Tower 已經非常好地支持 Git 大文件系統。

如果你使用命令行來運行 Git,可以選擇以下方法來安裝 LFS:

  • 二進制安裝包:最新版本的 binary packages, 支持 Windows,Mac,Linux 以及 FreeBSD 。

  • Linux:Debian 和 RPM 的軟件包可從 PackageCloud 獲得。

  • macOS:你可以使用 Homebrew 執行“brew install git-lfs”來安裝,也可以使用 MacPorts 執行“port install git-lfs”安裝.

  • Windows:你可以使用包管理器 Chocolatey 執行“choco install git-lfs”來安裝。

等你的包管理器完成上述安裝後,你還需要執行“lfs install”命令:

git lfs install


使用 LFS 追蹤文件

沒有特別說明的情況下,LFS 不會處理大文件問題,因此,我們必須明確告訴 LFS 該處理哪些文件。

讓我們回到“大 Photoshop 文件”的示例, 我們可以使用“lfs track”命令來告訴 LFS 處理“design.psd”文件:

git lfs track "design-resources/design.psd"

乍一看,這條命令好像沒生效,不過,你會看到項目根目錄下新建了一個新文件 ".gitattributes" (如果已存在,將會被修改),".gitattributes" 文件記錄了我們用 LFS 追蹤的所有的文件路徑。

cat .gitattributes 
design-resources/design.psd filter=lfs diff=lfs merge=lfs -text

棒棒噠!在這之後 LFS 會處理這個文件。我們接下來只要像往常那樣把這個文件提交到倉庫。值得注意的是,".gitattributes" 文件也需要提交到倉庫,操作和提交其他修改文件一樣:

git add .gitattributes
git add design-resources/design.psd
git commit -m "Add design file"


追蹤文件路徑

添加單一文件如上所示就可以。但是,比如說,如果你想追蹤項目裏所有後綴名爲 indd 的文件呢?放心,你不用手動的添加每個文件。LFS 允許你定義文件路徑,就像忽略文件時的用法那樣。舉個例子,下面的命令會告訴 LFS 追蹤所有的 InDesign 文件 — 已經存在的和以後添加的。

git lfs track "*.indd"

你也可以告訴 LFS 追蹤整個文件夾裏的所有內容:

git lfs track "design-assets/*"


追蹤文件概述

有時候,你可能想知道到底有哪些文件在被 LFS 追蹤。你可以簡單的看看.gitattributes文件。然而,它們不是真實的文件,而是包含一些規則和理論的文件:某些文件可能會漏掉,例如由於拼寫錯誤或者過分嚴格的規則。

想要查看你當前正在追蹤的實際文件的列表,可以使用 git lfs ls-files 命令:

git lfs ls-files
194dcdb603 * design-resources/design.psd


儘早追蹤

記住 LFS 並沒有改變 git 本身的原理:被提交到倉庫中的文件還會留在那兒。改變項目的提交歷史很困難(也有風險)。

這意味着你應該在文件沒有提交到倉庫前就讓 LFS 進行追蹤。

不然,它就成了項目歷史的一部分 - 令項目增大數 MB 或數 GB 的大小...

初始化倉庫時要選擇配置要追蹤的文件規則的完美時機(就跟配置忽略文件一樣)。


通過圖形化工具使用 LFS

儘管 LFS 使用起來並不困難,但是還是需要記住一堆命令和,處理一些事情。 如果你想更高效地使用 Git(還有 LFS),可以看一下 Tower,Mac 和 Windows 上的一個 Git 桌面客戶端。現在 Tower 已經內置支持 Git LFS,不需要再安裝任何東西。這個應用已經面市了數年並得到了世界各地約 80,000 的用戶的支持和信賴。

另外, Tower 可以直接與 Gitlab 集成!使用 Tower 連接到你的 GitLab 賬號後,你就可以點下鼠標來克隆和創建倉庫啦。



使用 Git

LFS 有一個很讚的特點是,可以像之前一樣保留正常的 Git 工作流程:暫存,提交,push,pull 和其他所有的操作。 除了我們討論過的命令,沒有什麼需要額外注意的了。

LFS 將在你需要時提供所需的文件。

如果你正在尋找有關 LFS 的更多信息,請看看這本免費在線書。 有關 Git 的常用技巧,請參閱 Git Tips&Tricks 中發佈的博文和 Tower 的視頻系列

關於 Guest 的作者

本文是由 Tobias Günther 撰寫,是 Tower Git client 團隊的一員,發佈在用戶文章中。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章