You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mercurial:私有仓库插件目录与公开子仓库双向同步方案咨询

解决方案:Mercurial多仓库同步适配游戏插件场景

方法一:子仓库(Subrepos)+ 路径重定向配置

这是最贴合需求的原生方案,核心是让私有游戏仓库将插件目录作为子仓库,同时在公开插件仓库中保持所需的顶层结构。

配置步骤

  1. 初始化公开插件仓库
    先创建符合分发要求的公开仓库结构:

    my-plugin-repo/
    ├── README.md
    ├── LICENSE.txt
    ├── docs/
    ├── addons/
    │   └── my-plugin/  # 插件核心代码存放目录
    └── example-project.cfg
    

    在my-plugin-repo中初始化Mercurial仓库并提交所有文件。

  2. 配置私有游戏仓库的子仓库映射
    在私有game仓库根目录创建.hgsub文件,添加以下内容:

    addons/my-plugin = ../my-plugin-repo/addons/my-plugin
    

    同时创建.hgsubstate文件(Mercurial会自动管理该文件,记录子仓库当前提交哈希)。

  3. 提交子仓库配置到私有仓库
    在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扩展实现历史过滤。

配置步骤

  1. 创建中间仓库提取插件历史
    在game仓库旁创建临时仓库,配置convert扩展的路径映射:
    创建map.txt文件:

    include addons/my-plugin
    rename addons/my-plugin .
    

    提取插件历史到中间仓库:

    hg convert --filemap map.txt game/ my-plugin-temp/
    
  2. 合并中间仓库历史到公开插件仓库
    在公开my-plugin-repo中添加中间仓库为远程:

    cd my-plugin-repo
    hg pull ../my-plugin-temp
    hg merge
    hg commit -m "Merge plugin history from private game repo"
    
  3. 设置双向同步过滤规则
    在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:46:01