關於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM