Mercurial:私有仓库插件目录与公开子仓库双向同步方案咨询
解决方案:Mercurial多仓库同步适配游戏插件场景
方法一:子仓库(Subrepos)+ 路径重定向配置
这是最贴合需求的原生方案,核心是让私有游戏仓库将插件目录作为子仓库,同时在公开插件仓库中保持所需的顶层结构。
配置步骤
初始化公开插件仓库
先创建符合分发要求的公开仓库结构:my-plugin-repo/ ├── README.md ├── LICENSE.txt ├── docs/ ├── addons/ │ └── my-plugin/ # 插件核心代码存放目录 └── example-project.cfg在
my-plugin-repo中初始化Mercurial仓库并提交所有文件。配置私有游戏仓库的子仓库映射
在私有game仓库根目录创建.hgsub文件,添加以下内容:addons/my-plugin = ../my-plugin-repo/addons/my-plugin同时创建
.hgsubstate文件(Mercurial会自动管理该文件,记录子仓库当前提交哈希)。提交子仓库配置到私有仓库
在game仓库中执行:hg add .hgsub .hgsubstate hg commit -m "Add my-plugin as subrepo"
日常开发流程
私有仓库开发同步到公开仓库
直接在game/addons/my-plugin下编辑文件,提交到子仓库:cd game/addons/my-plugin hg commit -m "Update plugin feature" hg push # 推送到公开插件仓库的远程地址回到
game根仓库,提交子仓库状态更新:cd game hg commit -m "Update my-plugin to latest version"拉取公开仓库的外部贡献
在game/addons/my-plugin中拉取更新:cd game/addons/my-plugin hg pull -u回到
game根仓库提交状态更新即可。
适配需求点
- 支持在实际开发环境(
game/addons/my-plugin)直接编辑提交 - 双向同步无分支混乱
- 不依赖符号链接,跨平台兼容
- 其他用户拉取
game仓库时,执行hg clone --subrepos即可自动获取所有插件,无需额外操作 - 原生子仓库机制稳定性高,避免第三方工具的崩溃风险
方法二:转换扩展(Convert Extension)+ 中间仓库(适合复杂历史迁移)
如果子仓库方案无法满足历史迁移需求(比如需要从现有game仓库提取插件历史到公开仓库),可以使用Mercurial的convert扩展实现历史过滤。
配置步骤
创建中间仓库提取插件历史
在game仓库旁创建临时仓库,配置convert扩展的路径映射:
创建map.txt文件:include addons/my-plugin rename addons/my-plugin .提取插件历史到中间仓库:
hg convert --filemap map.txt game/ my-plugin-temp/合并中间仓库历史到公开插件仓库
在公开my-plugin-repo中添加中间仓库为远程:cd my-plugin-repo hg pull ../my-plugin-temp hg merge hg commit -m "Merge plugin history from private game repo"设置双向同步过滤规则
在game仓库的.hg/hgrc中添加推送过滤:[paths] my-plugin = http://somewhere.host/my-plugin-repo/ [hooks] pre-push.my-plugin = hg push --rev . --include addons/my-plugin my-plugin在公开插件仓库的
.hg/hgrc中添加拉取过滤:[paths] game-plugin = ../game/ [hooks] pre-pull.game-plugin = hg pull --include addons/my-plugin game-plugin
日常开发流程
- 私有仓库开发提交后,执行过滤推送到公开仓库
- 公开仓库的变更通过过滤拉取到私有仓库的插件目录
关键注意事项
- 子仓库方案优先级:优先选择子仓库方案,原生特性稳定性和可维护性更高,适合大多数场景。
- 避免误操作:在子仓库开发时,确保仅提交插件目录内的文件;可在
game仓库的.hgignore中添加插件目录的临时文件规则。 - 跨平台兼容性:所有配置文件(
.hgsub、.hgrc)使用UTF-8编码,避免Windows下的编码问题。
内容的提问来源于stack exchange,提问作者mathrick
相关产品推荐
相关产品推荐

