git 管理二進制文件
本文檔將逐步帶你體驗 git 的大文件管理方式。
- 環境: windows10 64位 cmd
- git版本: git version 2.18.0.windows.1
創建到推送
創建二進制文件,修改並推送到遠程。
: 初始化項目
git init
: 創建 100k 大小文件模擬二進制文件 和普通文本
fsutil file createnew isbin.bin 102400
cd.>text.txt
: 開啟 lfs 功能及文件追蹤
git lfs install
git lfs track "isbin.bin"
: --------------- 大小 119 KB --------------- [.git .gitattributes isbin.bin text.txt]
: 提交文件
git add isbin.bin text.txt .gitattributes
git commit -m "初始化"
: --------------- 大小 221 KB ---------------
: 修改文件
echo a>>isbin.bin
echo a>>text.txt
git add isbin.bin text.txt
git commit -m "添加a"
: --------------- 大小 321 KB ---------------
: 修改文件
echo b>>isbin.bin
echo b>>text.txt
git add isbin.bin text.txt
git commit -m "添加b"
: --------------- 大小 422 KB --------------- 通過上面的大小發現,每次提交,二進制文件體積還是會增大一倍。
: 推送到遠端
git.exe push --progress "https://github.com/wll8/bin" master
克隆到推送
從遠程克隆,修改並推送。
: 從遠端克隆
git clone https://github.com/wll8/bin bintest
cd bintest
: --------------- 大小 222 KB --------------- 上傳 git 遠程的二進制文件只保存最新的一份, 其他的在 lfs 服務器上
: 測試回退到上個版本
git reset --hard HEAD~1
: --------------- 大小 322 KB --------------- 這時候的大小說明回退版本時在 lfs 上下載該版本的文件到本地, 本地體積增加
git reset --hard HEAD~1
: --------------- 大小 422 KB ---------------
: 修改文件
git reset --hard origin/HEAD
echo c>>isbin.bin
echo c>>text.txt
git add isbin.bin text.txt
git commit -m "添加c"
: --------------- 大小 524 KB ---------------
: 推送到遠端
git.exe push --progress "https://github.com/wll8/bin" master
echo c>>isbin.bin
: 再來一次修改
echo d>>isbin.bin & echo d>>text.txt & git add isbin.bin text.txt & git commit -m "添加d" & git.exe push --progress "https://github.com/wll8/bin" master
: --------------- 大小 624 KB ---------------
再次克隆
驗證經過多次推送后的大小變化。
: 從遠端克隆
git clone https://github.com/wll8/bin bintest2
cd bintest2
: --------------- 大小 223 KB --------------- 看得出來多次推送也只在 git 上保存最后一次二進制文件
總結
經測確實是有效減少了 git 倉庫的體積。
LFS(Large File Storage) 大文件存儲是 git 的一個擴展。
在 git 拉取
或 推送
時在 lfs 服務器 下載
或 上傳
, 也就是沒有把每個版本保存在 github 服務器上。
其實違背了 git 的理念, 它依賴 lfs 服務器, 本地並不是一個完整的倉庫, 而且上傳到 lfs 服務器 比 github 還慢
。