文章目錄
使用 Git LFS 儲存大型檔案
分散式版控 Git 雖然已經改善了許多集中式版控的缺點,但針對內容 hash 的作法對於大型 binary 檔案,效能還是不夠令人滿意,針對這個問題 GitHub 與 GitLab 分別提出 Git LFS 與 Git Annex 做為處理大型檔案的解決方案
而市場上普遍使用 GitHub 所提出的 Git LFS(Large File Storage),就來看看 Git LFS 與 Git Annex 的差異與該如何使用 Git Lfs 吧
Git LFS 與 Git Annex 的不同之處
- | Git LFS | Git Annex |
---|---|---|
傳輸協定 | SSH and Https | SSH |
指令難易度 | 簡單 | 複雜 |
儲存方式 | Repository 外的檔案伺服器 | |
透過 text pointers 指向 | Repository 中的子目錄 | |
平台支援度 | 各平台皆支援 | Windows x64 不是全功能支援 |
雲端服務支援度 | github, bitbucket,gitlab | gitlab |
安裝 Git LFS
下載
Git-LFS-Windows
並安裝 下載位置初始化 Git LFS
git lfs install
如何使用 Git LFS
將大檔加入 Git LFS 追蹤
可以針對
單檔
、特定附檔名
或是資料夾
加入git lfs track "*.exe
會修改
.gitattributes
記得加入版控git add .gitattributes
Push 到 Git server
git add . git commit -m "Add large file" git push origin master
如何 Clone 及 Pull
可以直接使用
git clone
及git pull
,但可以使用git lfs clone
及git lfs pull
來加速
Clone
git clone
git lfs clone
Pull
使用情境和
clone
不同,一般情境只需使用git pull
,如果遇到無法順利取得完整檔案時才需要明確使用git lfs pull
git pull
git lfs pull
下載缺漏 lfs 檔案
其他指令
設定只取得 repository 指標不取得實際檔案,只在需要時才透過
git lfs pull
取得檔案全域設定
git -c filter.lfs.smudge= -c filter.lfs.required=false pull && git lfs pull
單一 repository
git -c filter.lfs.smudge= -c filter.lfs.required=false clone https://github.com/user/repo.git
取得幾天內的版本
設定近期天數
git config lfs.fetchrecentcommitsdays 7
永遠使用最近
git config lfs.fetchrecentalways true
取得指令
git lfs fetch --recent
從 local 刪除遠端已被移除的檔案
git lfs prune
納入或排除特定資料夾或是檔案
納入特定資料夾
git config lfs.fetchinclude 'folder/**'
排除特定標案
git config lfs.fetchexclude 'folder/a.mp4'
心得
Git LFS 的內容很少,指令也很容易,但一陣子沒用,指令又生疏不少,所以紀錄一下
剛好趁這個機會釐清了 git lfs 的指令涵義
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。