Git LFS(Large File Storage, 大文件存儲),是 Github 開發的一個 Git 的擴展,用於實現 Git 對大文件的支持。Git v2.12後的版本才支持了Git LFS。通常會利用它來把項目中的大文件存儲在 Git 倉庫之外的地方,這樣就可以減小 Git 倉庫本身的大小, 從而達到加快 clone 速度的目的。
原理
舉一個典型的應用場景,在產品的版本迭代中,視覺設計師會把設計原稿psd文件放在你的項目中做響應的版本管理。這通常會是一個幾十甚至幾百兆的文件,每當設個設計稿(假設有100MB)更新後,你進行一次commit,就會在你的本地倉庫中以文件的形式增加一個100MB的歷史快照(放在.git文件夾中)。這樣你的本地倉庫就會迅速膨脹,然後再經過你push之後,遠程倉庫也會變的臃腫不堪。
而使用了LFS之後,在你每次push的時候,會把這些中間快照push到遠程倉庫之外的地方,取而代之的是會在倉庫中保留一份文件指針,指向這些中間快照。這樣遠程 Git 倉庫將會變的很簡潔,別人 clone 你的代碼時也會快很多。因爲不使用 LFS 的話,之前所有的快照都會被下載下來,而使用 LFS 的話只會下載當前 commit 版本對應的快照,所以內容會小很多。
下面是網絡上盜的一張圖
用法
安裝:git lfs install
追蹤文件:git lfs track "*.psd",第一次執行會在項目的根目錄的創建一個.gitattributes文件,裏面保存了文件的追蹤規則,有點類似於.gitignore的感覺。只不過.gitignore規定了哪些文件不上傳,而.gitattributes規定了哪些文件上傳到 LFS。執行了track之後,其他 Git 操作命令均不變。
查看現有的文件追蹤模式:git lfs track
查看當前被追蹤的文件列表:git lfs ls-files
注意:提交代碼時需將.gitattributes文件一併提交
常用 Git LFS 命令
# 查看當前使用 Git LFS 管理的匹配列表
git lfs track
# 使用 Git LFS 管理指定的文件
git lfs track "*.psd"
# 不再使用 Git LFS 管理指定的文件
git lfs untrack "*.psd"
# 類似 `git status`,查看當前 Git LFS 對象的狀態
git lfs status
# 枚舉目前所有被 Git LFS 管理的具體文件
git lfs ls-files
# 檢查當前所用 Git LFS 的版本
git lfs version
# 針對使用了 LFS 的倉庫進行了特別優化的 clone 命令,顯著提升獲取
# LFS 對象的速度,接受和 `git clone` 一樣的參數。 [1] [2]
git lfs clone https://github.com/user/repo.git