将Mercurial存储库转换为Git

时间:2009-09-07 12:55:31

标签: git mercurial

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

两者都没有成功。 hg2git实际上工作,但我不得不问一个运行Unix机器的朋友。这搞砸了整个文件中的所有换行符。

hg-git只是因为一些libzip压缩错误而失败了。

有人在Windows上将hg repo转换为git有什么成功吗?

要明确,我不关心互操作。我想把整个回购从hg移植到git,带走历史。我不需要来回推送更改 - 只转换一次。

提前致谢!

12 个答案:

答案 0 :(得分:57)

我的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

答案 1 :(得分:13)

Windows 7 64位解决方案

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

这是我曾经想过的最愚蠢的事件序列之一,但我根本不是一个Python人。

我的开始环境

  • Visual Studio 2010/2012
  • TortoiseHg 2.8.2;包括Mercurial 2.6.3& Python 2.7.3
  • Git 1.8.3

我一路上遇到的错误

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

我做了什么

  • 必须单独安装Python27(http://www.python.org/
  • 确保将路径放在环境变量中的路径
  • 必须安装Easy_Install(http://sourceforge.net/projects/pywin32/files/
  • 确保Python Scripts路径也在Environment Variables
  • 得到这个......不得不去MSDN并下载完整版的Visual Studio 2008并且只安装了带有64位选项的C ++(因此Easy_Install可以为Python编译Mercurial模块),但我不能让它与Express版一起使用,因为找不到64位选项。

步骤

  • 在命令控制台中(安装完所有内容后)
    • C:\ easy_install mercurial

(如果您安装了所有内容,您应该看到它下载并编译Mercurial模块)

  • 在Git控制台中
    • 按照@ mauvis-ledford和@benno(感谢大家!!!)
    • 的步骤

答案 2 :(得分:8)

以下是如何将Mercurial repo的本地克隆导出到GitHub的简单示例。

首先,如果您尚未将hggit扩展名添加到~/.hgrc文件:

[extensions]
hggit =

然后从Mercurial存储库的根目录运行以下命令:

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

就个人而言,我必须在运行-f时指定hg push,但我怀疑是因为我的Mercurial仓库中有一些复杂的分支。您可能认为没有必要进行迁移。

确保您的GitHub存储库有git+ssh: URI,而不是git: URI。 (在新的GitHub UI中,git+ssh: URI有点难以找到。)

根据您的仓库的大小,运行hg push可能需要一段时间,因此请耐心等待。完成后,您应该能够在GitHub上看到您的项目。在此示例中,我的项目位于https://github.com/bolinfest/plovr

正如您所料,现在任何人都可以按如下方式克隆您的公共GitHub仓库:

git clone git@github.com:bolinfest/plovr.git

答案 3 :(得分:7)

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

<强>先决条件

  • GIT中
  • Mercurial或TortoiseHg
  • Python 2.7(3.x无效)

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

<强>移植

  1. 打开cmd.exe
  2. mkdir c:\git_work
  3. cd c:\git_work
  4. git clone http://repo.or.cz/r/fast-export.git
    这将创建文件夹:c:\ git_work \ fast-export \
  5. 现在你需要用于python的mercurial libs。要么从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\library.zip')
    # ...above the old line:
    from mercurial import node
    
  6. mkdir MyNewGitRepo

  7. 将快速导出的内容复制到MyNewGitRepo,忽略.git *
  8. hg-fast-import.sh -r c:\Path\To\MyOldHgRepo
  9. 如果失败并显示“错误:存储库至少有一个未命名的头...” 使用参数:--force
  10. 调用最后一行
  11. 删除迁移脚本:

    git clean -n # see what would happen
    git clean -f # delete migration files
    
  12. 通过重置索引和工作树来恢复丢失的文件。

    git reset --hard
    

答案 4 :(得分:7)

截至今天,git发行版包含一个将mercurial资源库转换为git,hg-to-git的工具。如果您安装了最新的git版本,它就在那里。为我工作得非常好。

答案 5 :(得分:5)

如果您正好使用GitHub ,您的Mercurial仓库可通过HTTP / HTTPS获取......

在使用快速导入(一个很好的工具,没有问题转换我的仓库)和将我的新git仓库从我的开发箱推送到GitHub的过程中,我注意到一个选项“从另一个存储库导入代码” GitHub上我的git repo的“快速设置”部分。

我测试了它并获得了与使用快速导入相同的结果。在我的情况下,使用GitHub导入选项比快速导入更简单(再次,没有任何反对该工具,不,我不适用于GitHub)。对我有用的步骤是:

  1. 创建新的GitHub存储库
  2. 创建回购后,在快速设置中选择“导入代码”选项
  3. 输入公开可用的hg,svn或tfs repo的URL,然后在“Github Importer”对话框中按“Begin import”

答案 6 :(得分:3)

如果你真的只想这样做一旦你可以这样使用hg export

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

或者如果git每个文件只选择一个补丁,则可以为每个变更集创建一个补丁:

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

大概git apply可以采用其中一种或另一种格式。

答案 7 :(得分:2)

你试过tailor吗?它可以将任何东西转换成任何东西,就像VCS一样,甚至可以递增地执行它(也就是说,你转换一次,然后从源添加到目标的新提交,而不从头开始重新转换)。你现在可能不需要它,但它仍然是一个很好的功能。

答案 8 :(得分:2)

在Git和amp;之间转换的简单方法没有本地进程的Hg是打开free KilnHg / Fogbugz account,创建一个私人仓库,将一种格式推送到它然后拉入另一种格式,它适用于Git和amp; Hg和(应该)进行无缝转换。

答案 9 :(得分:1)

我在这里尝试了其他一些答案并没有太多运气。这是一个非常直接的方法,经过多次试验和错误后,对我有用的方法:

首先,download the hggit扩展名并将其添加到〜/ .hgrc或mercurial.ini文件中,如果您还没有这样做:

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

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

hg bookmarks hg-default

然后使用hggit通过运行hg gexport在与当前Hg仓库相同的文件夹中创建git仓库。结果将添加.git文件夹。当你从你的仓库中删除.hg文件夹时,你将留下一个本地的git仓库。

答案 10 :(得分:0)

似乎没有任何理由你无法在Windows上运行hg2git。它的python有一个Windows端口。只需确保存在正确的库并在窗口框中运行它。

答案 11 :(得分:0)

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