我已经通过快速导出尝试了hg2git,我已经尝试过hg-git.
两者都没有成功.hg2git实际上工作,但我不得不问一个运行Unix机器的朋友.这搞砸了整个文件中的所有换行符.
hg-git只是因为一些libzip压缩错误而失败了.
有人在Windows上将hg repo转换为git有什么成功吗?
要清楚,我不关心互操作.我想把整个回购从hg移植到git,带走历史.我不需要来回推送更改 - 只需转换一次.
提前致谢!
在我的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
如何将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的步骤(谢谢你们!!!)
以下是如何将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
以下是在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
截至今天,git发行版包括一个将mercurial存储库转换为git,hg-to-git的工具.如果您安装了最新的git版本,它就在那里.为我工作得很好.
如果你碰巧使用GitHub ,你的Mercurial仓库可以通过HTTP/HTTPS获得......
在使用快速导入(一个很好的工具,没有问题转换我的仓库)和将我的新git仓库从我的开发箱推送到GitHub的过程中,我注意到在"快速设置"期间选择"从另一个存储库导入代码" "我在GitHub上的git repo的一部分.
我测试了它并获得了与使用快速导入相同的结果.在我的情况下,使用GitHub导入选项比快速导入更简单(再次,没有任何反对该工具,不,我不适用于GitHub).对我有用的步骤是:
创建一个新的GitHub仓库
创建存储库后,在快速设置中选择"导入代码"选项
输入公共可用的hg,svn或tfs repo的URL,然后在"Github Importer"对话框中按"Begin import"