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

从Mercurial迁移至Git时保留原仓库nodeid的方法

完美迁移Mercurial到Git并保留nodeid的方案

你的需求完全可以通过hg-git这个官方维护的Mercurial扩展实现,它不仅能完整迁移所有历史记录、分支、标签,还会自动把Mercurial的唯一nodeid嵌入到对应的Git提交信息末尾,完全不用手动修改提交内容。

具体步骤:

  1. 安装hg-git扩展
    这个扩展可以通过pip直接安装:

    pip install hg-git
    

    如果你用的是Linux发行版,也可以通过系统包管理器安装(比如Debian/Ubuntu的mercurial-git包)。

  2. 配置Mercurial启用扩展
    编辑你的Mercurial配置文件(全局的~/.hgrc或者仓库本地的.hg/hgrc),添加以下内容:

    [extensions]
    hgext.git =
    
  3. 准备目标Git仓库
    先创建一个空的Git仓库(可以是本地或者远程):

    # 本地创建示例
    mkdir my-project-git && cd my-project-git
    git init --bare
    
  4. 执行迁移
    回到你的Mercurial仓库目录,把仓库推送到刚才创建的Git仓库:

    hg push git+file:///path/to/your/my-project-git
    

    如果是远程Git仓库(比如GitHub/GitLab),直接用对应的HTTPS或SSH地址即可:

    hg push git@github.com:your-username/my-project.git
    

验证迁移结果

迁移完成后,你可以在Git仓库里查看提交信息,每个提交的末尾都会自动加上一行:

node: <完整的Mercurial nodeid>

之后如果你需要通过原Hg nodeid查找Git提交,直接用Git的日志搜索命令:

git log --grep="node: <Hg nodeid>"

就能快速定位到对应的Git提交记录。

额外说明

  • hg-git会完整保留Mercurial的分支结构、标签、提交历史,甚至包括合并记录,完全不用担心历史丢失。
  • 对于超大型仓库,迁移过程可能需要一些时间,建议在网络稳定的环境下操作,避免中断。
  • 如果迁移后需要双向同步(Hg和Git互相推送),hg-git也支持这个功能,不过如果只是一次性迁移,上面的步骤就足够了。

内容的提问来源于stack exchange,提问作者gooznick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:48:31