将Mercurial存储库转换为Git

Tig*_*ine 45 git mercurial

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

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

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

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

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

提前致谢!

Mau*_*ord 56

在我的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
Run Code Online (Sandbox Code Playgroud)

  • 上面的说明有点复杂; 检查快速出口到您的新回购,然后清洁有点kludgy.更简单的是:`git clone git://repo.or.cz/fast-export.git; mkdir myrepo; cd myrepo; git init; ../fast-export/hg-fast-export.sh -r ../path/to/local/hg/repo`.这样您就不必担心`fast-export.git`可能会与原始仓库中的文件发生冲突. (8认同)
  • 这仅适用于Mercurial 2.2.如果您有Mercurial 2.3,那么尝试安装一个较旧的Python包,例如`pip install mercurial == 2.2`,否则会得到`ImportError:无法导入名称repo` (4认同)
  • 这对我在OSX上使用Mercurial 2.4 + 20121105和git 1.7.10.2.另外,我从`https:// github.com/frej/fast-export`克隆而不是上面的repo. (2认同)

Tre*_*ann 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/)
  • 确保将路径放在环境变量中的Path中
  • 不得不安装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的步骤(谢谢你们!!!)


bol*_*est 8

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

首先,如果您还没有将hggit扩展名添加到~/.hgrc文件中:

[extensions]
hggit =
Run Code Online (Sandbox Code Playgroud)

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

hg bookmark -r default master
hg push -f git+ssh://git@github.com/bolinfest/plovr.git
Run Code Online (Sandbox Code Playgroud)

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

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

根据您的仓库的大小,运行hg push可能需要一段时间,所以要耐心等待.完成后,您应该能够在GitHub上看到您的项目.在这个例子中,我的项目可以在https://github.com/bolinfest/plovr上找到.

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

git clone git@github.com:bolinfest/plovr.git
Run Code Online (Sandbox Code Playgroud)

  • 我让hggit将数据从本地Hg存储库移动到本地git存储库,但是看起来它已将所有提交移动到master分支中,并且不尊重我拥有的Hg分支。我错过了什么? (2认同)

Pip*_*per 7

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

先决条件

  • 混帐
  • 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.要么从这里 获取它们,要么执行以下步骤.
    编辑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
    
    Run Code Online (Sandbox Code Playgroud)
  6. mkdir MyNewGitRepo

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

    git clean -n # see what would happen
    git clean -f # delete migration files
    
    Run Code Online (Sandbox Code Playgroud)
  11. 通过重置索引和工作树来还原丢失的文件.

    git reset --hard
    
    Run Code Online (Sandbox Code Playgroud)


Mau*_*nes 7

截至今天,git发行版包括一个将mercurial存储库转换为git,hg-to-git的工具.如果您安装了最新的git版本,它就在那里.为我工作得很好.


Mik*_*son 6

如果你碰巧使用GitHub ,你的Mercurial仓库可以通过HTTP/HTTPS获得......

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

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

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