代码之家  ›  专栏  ›  技术社区  ›  Tigraine

将Mercurial仓库转换为Git

  •  47
  • Tigraine  · 技术社区  · 16 年前

    我已经通过快速导出尝试过hg2git,也已经尝试过hg git。

    两者都没有成功。hg2git确实有效,但我不得不请一位运行Unix机器的朋友来做。这把文件中的所有换行都弄乱了。

    hggit只是因为libzip压缩错误而失败。

    12 回复  |  直到 6 年前
        1
  •  57
  •   Omar    12 年前

    在我的Mac上执行以下操作以成功将Mercurial仓库导出到Git(具有完整分支):

    mkdir myrepo; cd myrepo;
    git clone git://repo.or.cz/fast-export.git .
    rm -rf .git .gitignore
    git init
    ./hg-fast-export.sh -r ../path/to/local/hg/repo
    git clean -f # remove fast-export files
    
        2
  •  13
  •   Tom Zych    10 年前

    如何将Mercurial仓库转换为Git仓库。

    我一路上犯的错误

    • 找不到Python
    • 在Python中找不到Mercurial模块
    • Easy_Install不存在
    • 无法编译Mercurial模块

        3
  •  8
  •   bolinfest    12 年前

    首先,添加 hggit 扩展到您的 ~/.hgrc

    [extensions]
    hggit =
    

    hg bookmark -r default master
    hg push -f git+ssh://git@github.com/bolinfest/plovr.git
    

    就我个人而言,我必须具体说明 -f hg push ,尽管我怀疑这是因为我的Mercurial仓库中有一些复杂的分支。您可能觉得迁移没有必要。

    git+ssh: 指向GitHub仓库的URI,而不是 git: URI在新的GitHub UI中更难找到。)

    可能需要一段时间,所以要有耐心。完成后,您应该可以在GitHub上看到您的项目。在这个例子中,我的项目可以在 https://github.com/bolinfest/plovr .

    git clone git@github.com:bolinfest/plovr.git
    
        4
  •  7
  •   Maurício C Antunes    12 年前

    截至今天,git发行版包括一个将mercurial存储库转换为git的工具, hg-to-git

        5
  •  7
  •   Piper    11 年前

    以下是Windows上迁移的所有部分。

    在安装过程中,允许绑定到.sh文件。
    确保PATH环境变量中的所有工具都可用。

    迁移

    1. mkdir c:\git_work

    2. cd c:\git_work

    3. git clone http://repo.or.cz/r/fast-export.git

    4. here 执行以下步骤。
      编辑c:\git_work\fast-export\hg-fast-export.py:

      import sys # move this line up here
      # Add a new line that imports [mercurial libraries][2] from this zip:
      sys.path.append(r'C:\Program Files\TortoiseHg\lib\library.zip')
      # ...above the old line:
      from mercurial import node
      
    5. mkdir MyNewGitRepo

    6. 将快速导出的内容复制到MyNewGitRepo,忽略.git*

    7. hg-fast-import.sh -r c:\Path\To\MyOldHgRepo

    8. 如果此操作失败,并显示“错误:存储库至少有一个未命名的头…” 使用参数--force调用最后一行

    9. 删除迁移脚本:

      git clean-n#看看会发生什么 git clean-f#删除迁移文件

    10. 通过重置索引和工作树来恢复丢失的文件。

      git重置--硬

        6
  •  5
  •   Mike Atkisson    11 年前

    如果你正在使用GitHub 您的Mercurial仓库可以通过HTTP/HTTPS访问。..

    我测试了它,并取得了与使用快速导入相同的结果。在我的情况下,使用GitHub导入选项比快速导入更容易一些(同样,对该工具没有任何反对意见,不,我不为GitHub工作)。对我有效的步骤是:

    1. 创建仓库后,在快速设置中选择“导入代码”选项
        7
  •  3
  •   Ry4an Brase    16 年前

    如果你真的只想做一次,你可以使用 hg export

    hg export 0:tip -o all-changesets-in-one.patch
    

    hg export 0:tip -o changeset-%r.patch
    

    大概 git apply

        8
  •  2
  •   Nowhere man    14 年前
        9
  •  2
  •   CAD bloke    11 年前

    我在这里尝试了其他一些答案,但运气不好。经过多次尝试和错误,这是一种非常简单的方法,对我来说很有效:

    download the hggit 扩展名并将其添加到您的~/.hgrc或mercurial.ini文件中(如果您还没有这样做):

    [extensions]
    hggit=\path\to\hg-git
    

    对于你想带到Git的每个分支,在分支的尖端添加一个Hg书签:

    hg bookmarks hg-default
    

    然后使用hggit在与当前Hg仓库相同的文件夹中创建一个git仓库,方法是运行 hg gexport

        10
  •  1
  •   Jeremy Wall    16 年前
        11
  •  1
  •   Remi Despres-Smyth    12 年前

        12
  •  0
  •   Chris Cannon    12 年前

    如果有人在OS X上使用Homebrew,并想知道使其正常工作的细微调整,请参阅此处的文章: http://www.ccannon.net/mercurial-to-git-conversion-with-homebrew.html