GitHubDesktop2Chinese版本管理机制完整解析minversion校验与Dev/Beta/Release比较设计【免费下载链接】GitHubDesktop2ChineseGithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2ChineseGitHubDesktop2Chinese 是一个 GitHub 桌面客户端中文汉化工具它通过替换 GitHub Desktop 内部main.js/renderer.js中的英文脚本来实现汉化。这个项目的版本管理机制非常精巧加载器自身带版本号而汉化映射文件里有一个minversion最低版本要求两者通过一套 Dev / Beta / Release 三态比较规则互相校验确保新映射永远不会交给旧程序去执行。本文将带你完整看懂这套设计。一、版本从哪来编译期注入的 FILEVERSION 宏程序版本号并不是写死的字符串而是在编译时由 CMake 注入的宏 FILEVERSIONif(DEFINED FILE_VERSION) add_definitions(-DFILEVERSION${FILE_VERSION}) else() add_definitions(-DFILEVERSION0.0.0-Dev.0) endif()这里有一个巧妙的设计正式构建传入FILE_VERSION得到如1.0.14、1.2.0-beta.1这类真实版本本地调试没传版本时默认落入0.0.0-Dev.0——一个最低的 Dev 版天然被一切正式版判定为旧版。程序启动时这个宏字符串被解析成std::Version对象 FileVer贯穿整个生命周期。二、Dev / Beta / Release 三态一个字符串读懂全部版本信息版本解析的核心是 Version 类它把一段版本字符串拆成4 个数字 1 个状态组成部分含义示例major / minor / revision主版本.次版本.修订号1.2.3betaversion内部迭代号1.2.3-beta.7中的7status版本状态Dev / Beta / Release1.2.3-beta.7→ Beta解析逻辑Parse 状态机支持相当宽容的写法✅ 允许开头的v/V前缀如v1.40.100-beta.1✅alpha和dev关键词统一归为Dev 开发版✅beta关键词归为Beta 测试版✅ 纯数字如1.2.3默认是Release 正式版✅ 甚至允许1.2.3.7这种第四段数字非零时会自动升级为 Beta。解析结果还能用 toDetailedString 转回v1.40.100-alpha.456这样的发布标签格式——这正是 Releases 页面 tag 的名字格式方便程序版本与发布标签直接对号入座。三、比较规则Release 永远大于 BetaBeta 大于 Dev版本大小比较全部集中在 operator 一个函数里其余比较符都由它推导。规则可以浓缩成一张表比较场景结果先比 major → minor → revision数字大的胜三段数字都相同进入状态比较Release vs Beta / Dev正式版最大Beta vs Dev同版本号测试版更大同为 Dev 或同为 Beta比 betaversion 迭代号beta.7 beta.3也就是说1.2.31.2.3-beta.991.2.3-dev.999。这与语义化版本SemVer中 pre-release 先于正式版的约定完全一致。 为什么 Dev 版要设成最小配合上一节0.0.0-Dev.0的默认值开发者本地跑的程序会被所有正式版判定为旧版从而跳过一切面向用户的更新逻辑下一节详述调试过程不受干扰。四、minversion 校验防止旧加载器执行新映射这是整个机制里对用户最可见的一环。汉化映射文件 localization.json 的头部就声明了最低要求{ version: 3, minversion: 1.0.0, ... }version映射文件自身格式的版本仅在格式大改时更新minversion要求加载器即汉化程序至少达到的版本。程序在执行替换前的检查流程见 minversion 判断⏭️ 若自身是Dev 版或映射中minversion为空 → 直接放行不打扰开发者 解析minversion解析失败 → 告警并暂停交给人判断⚠️ 若FileVer JsonVer程序太旧→ 提示文件要求加载器版本至少为 X并询问是否输入f强制执行——因为强行用旧程序跑新映射可能导致 GitHub Desktop 无法打开✅ 版本满足 → 正常继续汉化。️ 这个设计的本质是双向防呆映射文件是持续更新的贡献者随时往 json/localization.json 里加条目而用户手里的 exe 可能停留在半年前。minversion 就像一道门票新版映射格式用到的新特性如第三方正则捕获参数旧加载器不认识就先拦下来提醒用户更新程序而不是默默替换出错。五、版本状态的第二重用途Dev 版跳过更新检查除了 minversionstatus字段还控制着自动更新行为。在 更新检查 中if(FileVer.status ! std::Version::Dev) { // 请求最新版本 Release 的 tag_name解析后与 FileVer 比较 if(FileVer remoteVer) { /* 提示并支持一键自动更新 */ } }正式版启动时拉取最新 Release 标签用同一套operator比较发现新版可一键断点续传更新Dev 版整段逻辑被跳过避免开发者频繁被请更新打断调试。另外 Dev 版还会自动把 日志级别调到 debug并在开发者菜单里多出一个手动指定程序版本选项devsetver允许开发者在同一个构建里模拟1.0.0、1.0.0-beta.5等任意状态方便逐条验证上面的比较规则。六、一张图看懂全流程阶段版本机制参与点源码位置编译期CMake 注入 FILEVERSION缺省0.0.0-Dev.0CMakeLists.txt启动字符串 → Version 对象数字 状态GitHubDesktop2Chinese.cpp更新检查Dev 版跳过正式版与远程 tag 比较GitHubDesktop2Chinese.cpp汉化前校验与映射文件 minversion 比较旧版拦截GitHubDesktop2Chinese.cpp日志/调试Dev 版开 debug 日志、可手动改版本GitHubDesktop2Chinese.cpp七、小结GitHubDesktop2Chinese 的版本管理可以总结为三个关键词状态化一个字符串同时携带数字 迭代号 Dev/Beta/Release 状态alpha、dev、beta、纯数字统统能被正确归位单向拦截minversion只拦程序过旧且 Dev 版免检对开发者零打扰编译期定版版本号由构建参数决定缺省落进最小的 Dev 版调试与发布行为天然隔离。正是这套简洁而自洽的设计让汉化映射文件可以放心地快速迭代而用户手里的旧程序永远不会在不知情中被拖入替换失败的坑。如果你想深入贡献汉化条目建议先阅读 json/关于一些注意事项.txt 中关于正则转义的编写规范。【免费下载链接】GitHubDesktop2ChineseGithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?