关于git pull机制和游戏开发热更新思考
前言
今天由于网速很慢,在git pull更新时我观看了git pull的日志,让我联想到和我现在从事的游戏开发中的热更热有一定的相似性,把思绪记录下来。
git pull 日志
使用tortoisegit更新本地仓库时打印的日志如下:
git.exe pull --progress -v --no-rebase "origin"
POST git-upload-pack (982 bytes)
remote: Enumerating objects: 79, done.
remote: Counting objects: 100% (79/79), done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 74 (delta 40), reused 62 (delta 28), pack-reused 0
From https://github.com/zhaoqingqing/blog_samplecode
07d975b..44772ac master -> origin/master
Updating 07d975b..44772ac
Fast-forward
这里是具体更新内容...
内容结束....
成功 (10094 ms @ 2020/3/16 9:09:58)
git pull 日志分析
这段一行一行的从字面上解释日志,并加上我的理解
POST git-upload-pack (982 bytes)
向github网站发送请求信息,这里会上传本地.git目录下保存的本地仓库数据,供远程分析
remote: Enumerating objects: 79, done.
遍历此次需要的文件数量
remote: Counting objects: 100% (79/79), done.
统计此次需要更新的文件对象信息
remote: Compressing objects: 100% (46/46), done.
压缩此次需要更新的文件为一个压缩包
remote: Total 74 (delta 40), reused 62 (delta 28), pack-reused 0
总量74(有变化的40个),未使用的62(有变化的28个)
开始从github下载更新
成功 (10094 ms @ 2020/3/16 9:09:58)
如果长期未更新,或所要更新的仓库的分支越多和仓库体积越大时,每次更新所耗时也越长。
游戏开发的热更新方法
此次看到torisegit更新的内容,让我想起游戏里下载更新,在我所开发的游戏中热更新有以下几种方法:
启动游戏 ——> 对比版本号,下载需要更新的差异zip包
启动游戏 ——> 对比资源列表,本地对比出差异文件列表,开始从差异列表中下载文件
git pull机制剖析和游戏热更新的对比
从上面分析tortoisegit的更新日志来看,它的更新机制有区别于上述我所使用的热更新方法
—————————机制剖析 start———————————
我分析git每次更新前,都会通过对比本地.git目录的记录和远程的最新版本进行对比,
然后得出差异文件,
在github网站动态生成一个此次需要更新文件的临时zip
下载更新文件到本地
下载到本地之后,同时更新.git目录的记录
—————————机制剖析 end———————————
本地的.git目录中保存了本地的文件记录,用于在更新时进行文件对比
.git目录分析
每次更新时,.git目录最常变化的文件和目录有:objects目录和这三个文件index,ORIG_HEAD,FETCH_HEAD
objects 目录下保存所有的本地对象,下载更新时,会修改此目录的具体文件
index文件 类似于文件列表,里面记录着本地所有的文件列表和一些其它信息
ORIG_HEAD 服务器版本号(服务器当前被拉取分支的版本号)
FETCH_HEAD 本地每个分支的版本号
.git目录下所有的文件列表如下:
hooks\
info\
logs\
objects\
refs\
ORIG_HEAD
FETCH_HEAD
index
COMMIT_EDITMSG
tortoisegit.data
tortoisegit.index
config
HEAD
packed-refs
description
关于git pull机制和游戏开发热更新思考的更多相关文章
- 使用git pull时,项目没有更新?
进入项目目录后,执行 git pull 命令,没有将项目更新,并提示下图: 提示:there is no tracking information for the current branch. 意思 ...
- git fetch和git pull之间的区别--转载
原文地址:http://blog.csdn.net/a19881029/article/details/42245955 git fetch和git pull都可以用来更新本地库,它们之间有什么区别呢 ...
- git fetch and git pull &冲突
1.git fetch和git pull之间的区别 git fetch只会将本地库所关联的远程库的commit id更新至最新,fetch不会改变代码,如果想使代码更新,需要使用git merge o ...
- (转)git fetch + merge 和 git pull 的区别
转自:http://blog.csdn.net/a19881029/article/details/42245955 Git fetch和git pull都可以用来更新本地库,它们之间有什么区别呢? ...
- 【学习总结】Git学习-本地仓库覆盖式更新对于Git仓库的影响以及pull/push到GitHub
< 许久不用Git之后的探索 > 准备日常更新自己的GitHub了.但是编写的文件平时不放在Git仓库路径下. 故测试覆盖式更新对于仓库是否有影响 直接说结论: 通过对已有库的测试发现覆盖 ...
- Git 代码更新:git fetch 和 git pull 的区别
Git 从远程的分支获取最新的版本到本地有这样 2 个命令: 1. git fetch:相当于是从远程获取最新版本到本地,但不会自动 merge git fetch origin master git ...
- 【Git学习笔记】用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge【转】
本文转载自:http://blog.csdn.net/liuchunming033/article/details/45367629 git pull的作用是,从远程库中获取某个分支的更新,再与本地指 ...
- git pull更新错误解决办法
Your local changes to the following files would be overwritten by mergeerror: Your local changes to ...
- 第三方git pull免密码更新
方法一: git pull http://账号:密码@服务器地址/xxx/xxx.git master:master 方法二: 或者使用ssh免密码,生成的pub公钥内容拷贝的auth文件里面,同时添 ...
- 详解git pull和git fetch的区别
前言 在我们使用git的时候用的更新代码是git fetch,git pull这两条指令.但是有没有小伙伴去思考过这两者的区别呢?有经验的人总是说最好用git fetch+git merge,不建议用 ...
随机推荐
- 如何优化k8s中HPA的弹性速率
本文分享自华为云社区<K8s 核心资源指标HPA性能优化之路>,作者:可以交个朋友. 一 背景 以弹性指标为cpu.memory为例.在Kubernetes 1.7版本中引入了聚合层,允许 ...
- 100天搞定机器学习|Day59 主成分分析(PCA)原理及使用详解
数学概念 方差:用来衡量随机变量与其数学期望(均值)之间的偏离程度.统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数. $$Var(X)=\frac{1}{n}\sum(x_i- ...
- drf-jwt配置文件 jwt签发认证源码分析 自定义用户签发认证 simpleui后台管理美化 权限控制 (acl、rbac)
目录 昨日回顾 接口文档 自动生成接口文档 接口文档必备的内容 cookie-session-token发展史 token原理 base64 快速签发 定制返回格式 jwt的认证 drf-jwt配置文 ...
- 【辅助工具】IDEA使用
IDEA使用 快捷键 快捷键 alt+enter:代码错误智能提示 alt+up:上个方法 alt+down:下个方法 alt+1:快速定位到项目窗口,还可边按键盘输文件名查找文件 alt+F7:定位 ...
- 【库函数】Qt中Json的操作
参考博客: https://blog.csdn.net/hp_cpp/article/details/80338116 从文件中读取json https://www.cnblogs.com/ybqjy ...
- iOS安全加固探讨:代码混淆、类名方法名混淆等方法
摘要:本文探讨了iOS平台下的安全保护,以及几种常见的加固方法,包括字符串加密.类名方法名混淆.程序代码混淆和加入安全SDK等.通过这些方法,我们可以有效地提高iOS应用的安全性. 引言: 随着智能手 ...
- iview+vue 加载进度条
效果:浏览器最上方出现一个进度条. main.js import Vue from 'vue' import ViewUI from 'view-design'; import router from ...
- window对象的常见事件
2.1 窗口加载事件 window.onload = function() { } 或者 window.addEventListener("load", function(){}) ...
- distributor和gateway联合实现出中继的负载均衡+故障转移
概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在之前的文章,我们介绍过distributor模块实现多线路分发的配置方法,但是当线路发生故障时,distributor并不会自动跳 ...
- DDD领域驱动设计 (C# 整理自“老张的哲学”)
大话DDD领域驱动设计 概念 Domain Driven Design 领域驱动设计 第一个D(Domain): 领域:指围绕业务为核心而划分的实体模块. 第二个D(Driven): 驱动:这里的驱动 ...