【问题标题】:Converting a Mercurial (hg) repository to Git on Windows (7)在 Windows 上将 Mercurial (hg) 存储库转换为 Git (7)
【发布时间】:2011-03-17 02:01:31
【问题描述】:

在这一点上我真的很沮丧。我有一个现有的 hg 存储库,其中有几个月的编码历史,我想把它放到一个私有的 Github 存储库中,这样我就可以从那里处理它。不幸的是,我使用的是 Windows,但我似乎找不到 任何 方法来转换我实际上可以正常工作的存储库。实际上,我可以在网上找到的所有帮助和建议似乎都假设我是从某种 *nix shell 运行的,而我不是。

我目前已安装:TortoiseHG、Python 3.1 和 Git for Windows。

我尝试过的:

  1. hg 的 hg-init 插件 - 当我尝试使用 gexport 命令(以及来自 hg-git 的其他命令)时,我只得到 python 异常字符串。我完全无法让 git 甚至识别 gremote 命令。我尝试遵循这里的内容:http://github.com/blog/439-hg-git-mercurial-plugin

  2. hg-to-git(快速导出)- 所有教程都希望我运行 .sh 文件。另一个 stackoverflow 线程似乎暗示 Powershell 可以运行 .sh 文件,但我不能让它终生运行它们。示例:http://hivelogic.com/articles/converting-from-mercurial-to-git

  3. Mercurial 到 git 转换器 - http://permalink.gmane.org/gmane.comp.version-control.git/36601 - 当我通过 Python 运行它时,它不想工作,它抱怨它在第 44 行有语法错误。我不知道 python,所以我不知道。

4 小时的 Google 搜索和无用的教程以及比我更幸运的人对每篇所谓的有用博客文章的赞美,但我对此一无所获。任何人都可以提供任何帮助或建议让我尝试吗?

【问题讨论】:

  • Here 是分步教程。

标签: python windows git mercurial


【解决方案1】:
  1. 安装Cygwin(使用python、hg、git)
  2. 安装git-hg
  3. 运行git-hg clone ...url...

或者告诉我你这个hg repo的url是什么,我可以帮你转换。

【讨论】:

  • 谢谢你,摇滚。这个 Cygwin 的东西实际上有点酷!现在我可以像对待 Linux 一样对待 Windows。为了澄清,在安装 cygwin 之后,我按照hivelogic.com/articles/converting-from-mercurial-to-git 的说明进行操作 - 在我发现我必须合并任何杂散的头之前遇到了一些麻烦。一旦我只剩下一个头,转换就很好了。
  • Np,很高兴您能够转换为 git =]
  • 工作中的防火墙阻止“git clone git://repo.or.cz/fast-export.git”命令工作,从这里下载存档:repo.or.cz/w/fast-export.git/shortlog/refs/heads/master
  • 另外,我在转换完成之前收到“IOError: [Errno 32] Broken pipe”。我下载了一个旧版本,它运行良好。
  • 但是,hg-fast-export 目前在 Windows 上似乎被破坏了。有关修复,请参阅 stackoverflow.com/questions/10020325
【解决方案2】:

如果原始 Mercurial 存储库在 Web 上可用,并且您不介意使用 GitHub 来执行此操作,那么从 Mercurial 转换到 Git 现在非常容易:

  1. 登录 GitHub。
  2. 点击右上角的+
  3. 选择Import repository
  4. 提供 Mercurial 存储库的 URL、它在您的帐户下的名称,以及它是公开的还是私有的。
  5. 点击Begin import并等待。

之后您甚至不需要停留在页面上。稍后,GitHub 会通过电子邮件通知您导入完成。

【讨论】:

  • 这正是我需要的解决方案,所以,我知道这并不是对 OP 问题的真正回应,但还是非常感谢您!
【解决方案3】:

关于如何在 Windows 上将 Mercurial 存储库转换为 Git 存在很多相互矛盾的信息。这真的很简单,只需要安装 TortoiseHg 和 Git。

准备

通过将以下内容添加到您的 Mercurial 配置文件 (%Userprofile%\mercurial.ini) 来启用 hg-git:

[extensions]
hggit = 
hgext.bookmarks =

[git]
intree = True

转化

在命令行上导航到存储库目录(包含 .hg 子目录)并执行以下命令:

hg bookmark -r default master
hg gexport --debug
git config --bool core.bare false
git reset HEAD -- .

更多信息

您可以在我的blog article 中找到有关这些步骤的详细说明。

【讨论】:

  • 我假设您还需要安装 Hg 本身,对吗? (您没有提到这一点,但也许您认为它已经安装了)
  • @ClayNichols Hg 带有 TortoiseHg。
【解决方案4】:

我所读到的关于这些用于 Git 的 Hg 转换器的所有内容都指出了你犯的一个明显错误:使用 Python 3!

您遇到的那些 Python 错误是由于使用 Python 2.6 构建的 hg-git 和 fast-export 等脚本造成的。 Python 3 对“打印”的处理方式不同,因此会出现错误。

要么重写脚本以使用您的版本,要么安装 Python 2.6。

确保将其添加到您的 PATH 设置中。安装 msysGit 时也是如此。确保在安装时选择第二个选项以将 Git 添加到您的路径。

您还需要 Mercurial For Python,可在 TortoiseHG 的 thg-winbuild 项目中获得:

https://bitbucket.org/tortoisehg/thg-winbuild/downloads

对于 64 位 Windows,该文件将命名为“mercurial-2.2.2.win-amd64-py2.6.exe” 和 'mercurial-2.2.2.win32-py2.6.exe' 用于 32 位。当您使用它时,请获取配套的 Mercurial 2.2.2 安装程序,以防万一。

尽管您声明您不想再安装另一个 VCS 软件,但使用这些 Hg 转换器中的任何一个都需要安装 Mercurial。

另一个需要注意的缺陷是这些转换器可能不适用于最新版本的 Mercurial。您可能需要对较旧的版本进行一些试验,才能找到适合脚本的版本。

请务必仔细阅读您决定使用的任何转换器的教程和自述文件。看来您的很多悲伤和麻烦都源于仅浏览文档后就迫不及待地跳入了深渊。

有一些可用的补丁可以为 Git 和 msysGit 添加 Mercurial 支持,但如果您希望遵循这条路线,则需要熟悉从源代码进行补丁和编译。

【讨论】:

【解决方案5】:

这可能看起来很愚蠢(或者是绝望的解决方案......)但我认为 Bazaar 对 Hg 和 Git 存储库都有很好的支持,并且在 Windows 上运行良好。
所以如果一切都失败了,也许你可以使用bzr-hg 和 bzr-git 来进行转换......

【讨论】:

  • 可能,我宁愿不必安装另一个源代码控制系统...
【解决方案6】:

您是否考虑过安装msysgit?它为您提供的 git bash shell 应该能够运行 .sh 文件。

【讨论】:

  • 如果我对 bash 一无所知,会不会遇到麻烦?
  • 只要你小心翼翼,你应该没问题 - 另外,至少掌握一些基本的 linux 命令行技能对于任何开发人员来说都是一件好事。
  • +1 抵消负面影响。对我来说似乎是一个有效的答案
  • 我安装了 msysgit 并运行了 bash,但脚本仍然无法运行,因为它无法导入 Mercurial 模块,我不知道如何解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多