当前位置:  开发笔记 > 编程语言 > 正文

将Mercurial存储库转换为Git

如何解决《将Mercurial存储库转换为Git》经验,为你挑选了6个好方法。

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

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

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

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

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

提前致谢!



1> Mauvis Ledfo..:

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


上面的说明有点复杂; 检查快速出口到您的新回购,然后清洁有点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`可能会与原始仓库中的文件发生冲突.
这仅适用于Mercurial 2.2.如果您有Mercurial 2.3,那么尝试安装一个较旧的Python包,例如`pip install mercurial == 2.2`,否则会得到`ImportError:无法导入名称repo`
这对我在OSX上使用Mercurial 2.4 + 20121105和git 1.7.10.2.另外,我从`https:// github.com/frej/fast-export`克隆而不是上面的repo.

2> Trey Gramann..:
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的步骤(谢谢你们!!!)



3> bolinfest..:

以下是如何将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仓库中有一些复杂的分支.您可能认为没有必要进行迁移.

确保您拥有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


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

4> Piper..:

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

先决条件

混帐

Mercurial或TortoiseHg

Python 2.7(3.x不起作用)

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

移民

    打开cmd.exe

    mkdir c:\git_work

    cd c:\git_work

    git clone http://repo.or.cz/r/fast-export.git
    这会创建文件夹:c:\ git_work\fast-export \

    现在你需要用于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
    

    mkdir MyNewGitRepo

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

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

    如果失败并显示"错误:存储库至少有一个未命名的头...",请使用参数:--force调用最后一行

    删除迁移脚本:

    git clean -n # see what would happen
    git clean -f # delete migration files
    

    通过重置索引和工作树来还原丢失的文件.

    git reset --hard
    



5> Maurício C A..:

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



6> Mike Atkisso..:

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

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

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

    创建一个新的GitHub仓库

    创建存储库后,在快速设置中选择"导入代码"选项

    输入公共可用的hg,svn或tfs repo的URL,然后在"Github Importer"对话框中按"Begin import"

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有