git 管理和存储二进制大文件

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 还慢

?

原文地址:https://www.cnblogs.com/daysme/p/9571489.html

时间: 2024-11-06 07:32:41

git 管理和存储二进制大文件的相关文章

s3git 使用git 管理云存储

使用s3git 我们可以方便的基于git协议进行s3存储数据的版本管理,同时也提供了一个方便的golang 包, 我们可以集成到我们的应用中,但是有一点,目前已经没有再更新过了,但是设计理论很不错,实际上现在的 ipfs 与这种就是类似的做法,ipfs 更灵活强大. 参考资料 https://github.com/s3git/s3git https://github.com/s3git/s3git-go https://github.com/ipfs/go-ipfs 原文地址:https://w

git管理代码上传忽略文件

# Xcode## gitignore ## Various settings*.pbxuser!default.pbxuser*.mode1v3!default.mode1v3*.mode2v3!default.mode2v3*.perspectivev3!default.perspectivev3xcuserdata/ .gitignore.DS_Store ## Other*.moved-aside*.xcuserstate ## Obj-C/Swift specific*.hmap*.i

asp.net大文件上传解决方案

以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  可以带参数 [HttpPost("upload")] public JsonResult uploadProject(IFormFile file, string userId) { if (file != null) { var fileDir = "D:\\aaa"

C# Asp.NET实现上传大文件(断点续传)

以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  可以带参数 [HttpPost("upload")] public JsonResult uploadProject(IFormFile file, string userId) { if (file != null) { var fileDir = "D:\\aaa"

c# 批量大文件上传下载

以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  可以带参数 [HttpPost("upload")] public JsonResult uploadProject(IFormFile file, string userId) { if (file != null) { var fileDir = "D:\\aaa"

ASP.NET实现浏览器端大文件分片上传

以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  可以带参数 [HttpPost("upload")] public JsonResult uploadProject(IFormFile file, string userId) { if (file != null) { var fileDir = "D:\\aaa"

创建一个版本库,把文件夹用Git管理起来

创建一个文件夹,把这个文件夹用Git管理起来,那么这个文件夹的改变都可以被Git跟踪到,当然也可以将Git中的文件还原到某一个时刻. 首先创建一个空的目录,然后将空的目录由Git来管理 1.建立一个文件夹: 2.在MINGW中进入文件夹 3.将这个文件夹由Git来管理 首先使用命令符pwd来确认当前所在的目录 确认完毕后将文件夹有Git来管理使用命令符git init   同时他告诉你这是一个空的文件夹 4.把文件添加到版本库中 首先必须明确一点所有的版本控制系统都只能跟踪文本文件的改动,比如t

git 突破大文件上传限制

1.安装 lfs: git lfs install 2.跟踪大文件:git lfs track "file.suffix" 3.添加配置文件:git add .gitattributes 之后正常提交,不过可能会遇到这个问题: Remote "origin" does not support the LFS locking API. Consider disabling it with:... 4.再执行此命令: $ git lfs push origin mast

大文件上传解决方案

版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/index.asp 在线演示:http://www.ncmem.com/products/up6.2/index.htm 产品介绍:http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html 升级日志:http://www.cnblogs.