為什麼 clone 下來的檔案不是正確的格式?認識 Git LFS

為什麼 clone 下來的檔案不是正確的格式?認識 Git LFS

目錄

最近遇到同事 git clone 一個專案,發現 clone 下來的壓縮檔居然是文字檔案!但我們在遠端看到的是壓縮檔,為什麼會這樣呢?原來是因為專案使用了 Git LFS,所以在 clone 時,只會 clone 下來指標檔案,而不是實際的大型檔案。這篇文章就來介紹一下 Git LFS。

Git Large File Storage(Git LFS)是一個 Git 擴展,用於改善大型二進制文件的處理。它通過將這些大型文件的實際內容存儲在遠程服務器上,並在 Git 倉庫中放置一個指針文件來實現這一點。這個指針文件是一個小的文本文件,包含了指向實際存儲位置的必要信息。

如果沒有安裝 Git LFS,當你使用 git clone 克隆一個包含 LFS 對象的倉庫時,Git 只會克隆包含指針的文本文件,而不是大型文件的實際內容。這是因為 Git 默認不知道如何處理這些指針文件所指向的大型文件。

這些文本指針文件通常包含以下信息:

  • 版本信息,表明該文件是由 Git LFS 管理的
  • 大型文件的 SHA-256 哈希值,用於唯一標識文件內容
  • 大型文件的大小

例如,一個 Git LFS 指針文件可能看起來像這樣:

version https://git-lfs.github.com/spec/v1
oid sha256:ce013625030ba8dba906f756967f9e9eef7e9b40e4e8b3464285c1a31a2a7a31
size 12345

如果你想要克隆倉庫並獲得大型文件的實際內容,你需要先安裝 Git LFS。一旦安裝並設置好,當你克隆倉庫或拉取更新時,Git LFS 會自動替換這些指針文件為對應的大型文件。

以下是添加 Git LFS 到你的 Git 倉庫的流程:

安裝 Git LFS

首先,你需要在你的機器上安裝 Git LFS。這可以通過不同的方式完成,取決於你的操作系統。

對於 Windows,你可以使用 Chocolatey

choco install git-lfs -y

對於 macOS,你可以使用 Homebrew

brew install git-lfs

對於 Ubuntu/Debian:

sudo apt-get install git-lfs -y

初始化 Git LFS

安裝完 Git LFS 之後,你需要在你想要使用它的倉庫中初始化它。這可以通過執行以下命令完成:

git lfs install

選擇要追蹤的文件類型

接下來,你需要指定哪些文件類型應該由 Git LFS 處理。這是通過使用 git lfs track 命令來完成的。例如,如果你想要追蹤所有 .zip 文件,你可以執行:

git lfs track "*.zip"

這將會更新 .gitattributes 文件,將指定的文件模式添加到其中。

添加文件並提交

將文件添加到你的倉庫中,就像你通常使用 Git 一樣:

git add file.zip
git commit -m "Add large file"

推送到遠端倉庫

最後,當你推送到遠端倉庫時,Git LFS 將會自動處理大文件的上傳。

git push origin main

請注意,當你克隆或拉取使用 Git LFS 的倉庫時,你可能需要使用特殊的命令來拉取大文件:

git lfs pull
標籤 :
分享 :

相關文章

如何使用 GitHub Actions 自動建立並推送 Docker Image

如何使用 GitHub Actions 自動建立並推送 Docker Image

在我們先前的文章 中,我們學習了如何使用 buildx 來建立能在多平台運行的 Docker Image。然而,這種方法仍需要手動操作。為了讓我們能在 Hugo 有新版本更新時自動建立對應的 Docker Image,我們可以利用 GitHub Actions 來實現這個目標。

閱讀更多
如何解決 git ssh key permission denied (publickey) 的錯誤

如何解決 git ssh key permission denied (publickey) 的錯誤

最近在設定 git ssh-key 時發生了 Permission denied (publickey) 的問題。雖然網路上有很多相關的解決方案,但是都沒有解決我的問題。因此在這邊紀錄一下我遇到的問題及解決方案。 已經確認 .ssh 資料夾裡面已經有 key 了,也在 GitHub 上正確設定了,在其他電腦運作都沒問題。但是在這台電腦上卻一直出現 Permission denied (publickey) 的錯誤。

閱讀更多