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

如何将Mercurial特定分支的变更拉取到Git并保留历史?

将Mercurial分支变更同步到Git并保留历史记录

方法一:通过Git直接拉取Mercurial分支变更

这种方式需要先确保Git环境安装了git-remote-hg工具(多数包管理器可直接安装,比如apt install git-remote-hg或brew install git-remote-hg)。

  • 进入已有的Git本地仓库,添加Mercurial仓库作为远程源:

    git remote add hg-origin hg::<Mercurial仓库地址>
    # 本地Mercurial仓库示例:hg::/Users/xxx/local-hg-repo
    # 远程Mercurial仓库示例:hg::https://hg.example.com/project-repo
    
  • 拉取Mercurial特定分支的完整历史到Git本地新分支:

    git fetch hg-origin <Mercurial分支名>:<Git本地临时分支名>
    # 示例:拉取Mercurial的dev分支到Git本地hg-dev-sync分支
    git fetch hg-origin dev:hg-dev-sync
    
  • 合并到目标Git分支(比如主开发分支main):

    git checkout main
    # 用--no-ff参数保留分支合并历史,便于追溯
    git merge --no-ff hg-dev-sync -m "Merge changes from Mercurial dev branch"
    

    若合并出现冲突,手动解决冲突后执行git commit完成合并即可。

方法二:通过Mercurial的hg-git扩展推送变更

如果更熟悉Mercurial操作,可使用hg-git扩展完成同步:

  • 编辑Mercurial配置文件(全局的~/.hgrc或仓库本地的.hg/hgrc),启用hg-git扩展:

    [extensions]
    hggit =
    
  • 克隆Git仓库作为Mercurial镜像仓库:

    hg gitclone <Git仓库地址> hg-git-mirror
    cd hg-git-mirror
    
  • 拉取原Mercurial仓库的目标分支变更:

    hg pull -r <Mercurial分支名> <原Mercurial仓库地址>
    hg update <Mercurial分支名>
    
  • 推送到Git仓库对应的分支:

    hg push git::<Git仓库地址> <Mercurial分支名>:<Git目标分支名>
    

后续预防措施

为避免再有人提交到Mercurial,可采取以下手段:

  • 将Mercurial仓库设置为只读权限(比如服务器端修改权限);
  • 在Mercurial仓库添加提交钩子,阻止提交并提示切换到Git:
    在仓库的.hg/hgrc中添加:
    [hooks]
    precommit = echo "⚠️ 该仓库已迁移至Git,请使用Git提交代码!" && exit 1
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:56:03