Git LFS介紹,為何需要它?

Weibert Weiberson
5 min readJun 18, 2024

--

Git LFS(Large File Storage)是 Git 的一個擴充套件,用於管理大型文件。

因為傳統的Git它對文件的版本控制和合併非常高效。然而,對於大型文件或二進制檔案(如圖片、音訊、影片、大型數據集等),Git 的性能和效率會明顯下降。

目錄
Git LFS 的主要功能和特點包括
Git LFS 如何處理文件儲存的流程
Git LFS 是否需要支付費用?
結論

Git LFS 的主要功能和特點包括:

當你將一個大型文件添加到 Git 倉庫中並使用 Git LFS 進行管理時,會發生以下幾個步驟:

  1. 提交指標文件:你提交到 Git 倉庫中的實際是這個小的指標文件,而不是原本的大型文件。
  2. 替換大型文件:Git LFS 會將大型文件替換為一個指向它們的文本指標(pointer),這個指標文件會被存儲在 Git 中,而實際的文件內容則被存儲在一個獨立的服務中。
  3. 儲存大型文件:原本的大型文件內容會被上傳並存儲到 Git LFS 的儲存系統中。這個存儲系統可以是專門的 Git LFS 服務,也可以是你設定的其他儲存後端。
  4. 減少倉庫大小:由於大型文件不直接儲存在 Git 倉庫中,這樣可以大大減少倉庫的大小,提高操作速度和效率。
  5. 檢索大型文件:當你或其他協作者Clone或Pull這個 Git 倉庫時,Git LFS 會自動下載這些指標文件並將其替換為實際的大型文件內容,從 Git LFS 的儲存系統中檢索回來。
  6. 簡化文件管理:開發者仍然可以像平常一樣使用 Git 命令來管理這些大型文件,因為 Git LFS 會在背後處理文件的儲存和檢索。

所以GIT倉庫中的大型文件 其實很小 可能只有幾KB 真實的文件存在LFS存儲系統中

這樣做有幾個好處:

  • 減小倉庫大小:因為 Git 倉庫中只存儲了小的指標文件,所以倉庫的大小會大大減小。
  • 提高性能:Git 操作的性能會提高,因為 Git 不需要處理大型文件。
  • 便捷管理:方便地跟蹤和管理大型文件。

EX: 如果你有一個 100 MB 的大型文件 largefile.bin,使用 Git LFS 後,Git 倉庫中保存的可能只是幾 KB 的指標文件,而 100 MB 的真實文件內容則存儲在 Git LFS 的存儲系統中。

Git LFS 如何處理文件儲存的流程:

  1. 提交文件:當你添加並提交這些被追蹤的文件時,Git LFS 會將這些文件替換為指標文件,指標文件中包含了一個指向實際文件位置的指針。
  2. 上傳文件:在執行 git push 時,Git LFS 會自動將這些大型文件上傳到 LFS 儲存服務器。這個服務器可以是 Git 提供的 LFS 儲存服務,也可以是其他第三方 LFS 儲存服務,例如 AWS S3、GitHub LFS、GitLab LFS 等。
  3. 下載文件:當其他用戶Clone或Pull這個儲存庫時,Git LFS 會自動從 LFS 儲存服務器下載實際的文件,而不是指標文件。

Git LFS 是否需要支付費用?

對於是否需要支付費用,取決於你選擇的服務提供商和使用量,我們以GitHub的LFS來看。

GitHub 為公有倉庫提供了一定的免費 LFS 配額:

  • 每個 GitHub 帳戶(包括免費和付費帳戶)都有 1 GB 的免費 LFS 存儲空間和每月 1 GB 的免費 LFS 傳輸量。

如果你需要更多的存儲空間或傳輸量,可以購買額外的配額:

  • 額外的存儲空間和傳輸量,每個數據包每月費用為5美元,並提供每月50 GiB的帶寬和50 GiB的存儲配額。您可以根據需要購買任意數量的數據包。例如,如果您需要150 GB的存儲空間,則需要購買三個數據包。

費用更詳細說明請看官方文件

結論

Git LFS (Large File Storage) 專門用來管理 Git 儲存庫中的大型文件。通過使用 Git LFS,你可以有效地解決傳統 Git 在處理大型文件時面臨的性能和儲存問題。它通過將大型文件替換為指標文件,並將實際文件存儲在專門的 LFS 儲存服務器上,減少了儲存庫的大小並提升了操作速度。

會想寫這篇科普文是因為在HuggingFace下載模型的時候,會用到lfs相關的指令,關於指令的教學會在之後再寫。

# Make sure you have git-lfs installed (https://git-lfs.com)
git lfs install

git clone https://huggingface.co/audreyt/Taiwan-LLM-7B-v2.0.1-chat-GGUF

# If you want to clone without large files - just their pointers
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/audreyt/Taiwan-LLM-7B-v2.0.1-chat-GGUF

下一篇會寫Git LFS安裝教學以及容易遇到的錯誤。

--

--