前言

今天由于网速很慢,在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机制和游戏开发热更新思考的更多相关文章

  1. 使用git pull时,项目没有更新?

    进入项目目录后,执行 git pull 命令,没有将项目更新,并提示下图: 提示:there is no tracking information for the current branch. 意思 ...

  2. git fetch和git pull之间的区别--转载

    原文地址:http://blog.csdn.net/a19881029/article/details/42245955 git fetch和git pull都可以用来更新本地库,它们之间有什么区别呢 ...

  3. git fetch and git pull &冲突

    1.git fetch和git pull之间的区别 git fetch只会将本地库所关联的远程库的commit id更新至最新,fetch不会改变代码,如果想使代码更新,需要使用git merge o ...

  4. (转)git fetch + merge 和 git pull 的区别

    转自:http://blog.csdn.net/a19881029/article/details/42245955 Git fetch和git pull都可以用来更新本地库,它们之间有什么区别呢? ...

  5. 【学习总结】Git学习-本地仓库覆盖式更新对于Git仓库的影响以及pull/push到GitHub

    < 许久不用Git之后的探索 > 准备日常更新自己的GitHub了.但是编写的文件平时不放在Git仓库路径下. 故测试覆盖式更新对于仓库是否有影响 直接说结论: 通过对已有库的测试发现覆盖 ...

  6. Git 代码更新:git fetch 和 git pull 的区别

    Git 从远程的分支获取最新的版本到本地有这样 2 个命令: 1. git fetch:相当于是从远程获取最新版本到本地,但不会自动 merge git fetch origin master git ...

  7. 【Git学习笔记】用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge【转】

    本文转载自:http://blog.csdn.net/liuchunming033/article/details/45367629 git pull的作用是,从远程库中获取某个分支的更新,再与本地指 ...

  8. git pull更新错误解决办法

    Your local changes to the following files would be overwritten by mergeerror: Your local changes to ...

  9. 第三方git pull免密码更新

    方法一: git pull http://账号:密码@服务器地址/xxx/xxx.git master:master 方法二: 或者使用ssh免密码,生成的pub公钥内容拷贝的auth文件里面,同时添 ...

  10. 详解git pull和git fetch的区别

    前言 在我们使用git的时候用的更新代码是git fetch,git pull这两条指令.但是有没有小伙伴去思考过这两者的区别呢?有经验的人总是说最好用git fetch+git merge,不建议用 ...

随机推荐

  1. Solon 拉取 maven 包很慢或拉不了,怎么办?

    注意:如果在 IDEA 设置里指定了 settings.xml,下面两个方案可能会失效.(或者直接拿"腾讯" 的镜像仓库地址,按自己的习惯配置) 1.可以在项目的 pom.xml ...

  2. .NET Moq mock internal类型

    问题 Can not create proxy for type xxx because type xxx is not accessible. Make it public, or internal ...

  3. 我“采访”了 ChatGPT

    我"采访"了 ChatGPT 大家好,我是准备认真码字的**老章:. 最近ChatGPT火的爆表,看了很多相关文章,特别焦虑,唯恐自己的进步赶不上 AI 的发展. 还有就是我非常看 ...

  4. IDC《中国边缘云市场解读 (2022)》:阿里云蝉联中国公有云市场第一

    国际权威咨询公司IDC发布<中国边缘云市场解读(2022 )>报告,中国边缘公有云服务市场,阿里云蝉联第一. 市场蝉联第一,"边缘"生长强劲 近期,全球领先的IT市场研 ...

  5. Linux 下 Docker 操作遭到守护程序套接字时访问权限被拒绝

    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker. ...

  6. xapian 搜索引擎介绍与使用入门

    Xapian 是一个开源搜索引擎库,使用 C++ 编写,并提供绑定(bindings )以允许从多种编程语言使用.它是一个高度适应性的工具包,允许开发人员轻松地将高级索引和搜索功能添加到自己的应用程序 ...

  7. ​iOS Class Guard github用法、工作原理和安装详解及使用经验总结

    ​iOS Class Guard github用法.工作原理和安装详解及使用经验总结 iOS Class Guard是一个用于OC类.协议.属性和方法名混淆的命令行工具.它是class-dump的扩展 ...

  8. 1 Englishi 词根

    1 ab  离去,相反, 不 (负能量的) abnormal abuse 2 anti  反对,相反 antiwar antiaging antiforeign antinoise 3 co-/col ...

  9. S3C2440移植linux3.4.2内核之支持YAFFS文件系统

    上一节S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统我们构建了根文件系统,这节我们修改内核支持yaffs2文件系统 目录 获取yaffs2源码并给内核打补丁 编译内核make ...

  10. freeswitch通过limit限制cps

    概述 freeswitch在业务开发中有极大的便利性,因为fs内部实现了很多小功能,这些小功能组合在一起,通过拨号计划就可以实现很多常见的业务功能. 在voip云平台的开发中,我们经常会碰到资源的限制 ...