我已经通过快速导出尝试了hg2git,我已经尝试过hg-git。
两者都没有成功。 hg2git实际上工作,但我不得不问一个运行Unix机器的朋友。这搞砸了整个文件中的所有换行符。
hg-git只是因为一些libzip压缩错误而失败了。
有人在Windows上将hg repo转换为git有什么成功吗?
要明确,我不关心互操作。我想把整个回购从hg移植到git,带走历史。我不需要来回推送更改 - 只转换一次。
提前致谢!
答案 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)
如何将Mercurial仓库转换为Git仓库。
这是我曾经想过的最愚蠢的事件序列之一,但我根本不是一个Python人。
(如果您安装了所有内容,您应该看到它下载并编译Mercurial模块)
答案 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上进行迁移的所有部分。
<强>先决条件强>
在安装过程中,允许绑定到.sh文件 确保PATH环境变量中的所有工具都可用。
<强>移植强>
mkdir c:\git_work
cd c:\git_work
git clone http://repo.or.cz/r/fast-export.git
现在你需要用于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
mkdir MyNewGitRepo
hg-fast-import.sh -r c:\Path\To\MyOldHgRepo
删除迁移脚本:
git clean -n # see what would happen
git clean -f # delete migration files
通过重置索引和工作树来恢复丢失的文件。
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)。对我有用的步骤是:
答案 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