1. 程式人生 > >git 管理和存儲二進制大文件

git 管理和存儲二進制大文件

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 管理和存儲二進制大文件