git 管理和存儲二進制大文件
阿新 • • 發佈:2018-09-01
ogl idt down important dddd dds url -h log
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 還慢
。
git 管理和存儲二進制大文件