通过Windows中的“快速导出”将Hg迁移到Git

时间:2018-03-12 10:56:28

标签: git mercurial azure-devops git-for-windows fastexport

我有一个具有mercurial HG代码源管理的项目,并尝试在VSTS / Git平台上迁移它。

我读到有一个工具可以做到这一点,“fast-export”......所以我尝试但没有达到在Windows中工作的目的......

假设我D:\MyProject包含.hg目录和项目代码文件,我

  • 下载了“D:\ fast-export-master”文件夹中的fast-export个文件,
  • 创建了一个新目录D:\MyProject-git
  • D:\MyProject-git git init命令中启动(当时出现了一个新的.git目录);
  • 现在来自同一个D:\MyProject-git我做了 ..\fast-export-master\hg-fast-export.sh -r "D:\MyProject"

现在奇怪的事情开始发生了,一个命令行窗口出现并且消失得如此之快我不明白发生了什么,所以我重新启动了上一个命令,希望看到这个消息......我应该尝试几次直到能够在printcreen中捕获命令行消息,这说明奇怪的事情:

  

其中:没有D:\ fast-export-master \ hg-fast-export.sh in(/ c / Users / xxx / bin:mingw64 / bin:/ user / local / bin:/ usr / bin:/ bin / mingw64 / bin:/ usr / bin:/ c / Users / xxx / bin:/ c / ProgramData / Oracle / Java / javapath:/ c / WINDOWS / system32 [... etc ...等。 ..]

我想知道问题是什么以及如何解决......

编辑:

按照@ max630建议,我重新安装了Python并更新了PATH,所以它在命令中被识别

> python
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

从开始菜单打开“GIT Bash”,然后

cd "/D/MyProject-git"
../fast-export-master/hg-fast-export.sh -r "D:\MyProject" --force

给出了:

../fast-export-master/hg-fast-export.sh: line 175: python: command not found
C:\Program Files\Git\mingw64\libexec\git-core\git-fast-import.exe statistics:
---------------------------------------------------------------------
Objects allocated:       5000
...

enter image description here

7 个答案:

答案 0 :(得分:1)

我认为您关注的是您导入了" hg-fast-export"根据错误消息" D:\ fast-export-master \ hg-fast-export.sh"进入未添加到环境变量的目录中在环境变量列表中找不到,因此请尝试在环境变量中添加以下" D:\ fast-export-master \"然后重试。

如果它还没有成功,请查看本文并按照所说的步骤进行操作:

https://www.appveyor.com/blog/2014/02/23/converting-mercurial-repository-to-git-on-windows/

作者已经复制了目录" hg-fast-export"进入新目录git(没有.git of" hg-fast-export")并且还在他的环境变量中添加了hg,git和python。

祝你好运

答案 1 :(得分:0)

与git捆绑的bash中似乎存在一个错误。它没有初始化" $ @"从cmd直接运行.sh文件开始正确。

打开" GIT Bash"从开始菜单,然后发出命令:

 [root@localhost /]# locate startup.sh

导航至cd "/D/MyProject-git"

D:\MyProject-git

运行脚本

答案 2 :(得分:0)

由于您已经安装了TortoiseHg,因此可以更轻松地将hg迁移到git。

首先,在TortoiseHg中启用hggit:

TortoiseHg - >全球设置 - >扩展程序标签 - >选择hggit - >行。

enter image description here

然后使用以下命令迁移并推送到VSTS git repo:

# In an empty folder
mkdir git
cd git
git init
cd ..
hg clone <URL for Hg repo>
cd hgrepo
hg bookmarks ../git
cd ..
cd git
git checkout hg
git remote add origin <VSTS git repo URL>
git push origin --all

答案 3 :(得分:0)

  

下面是@ max630的建议,我重新安装了Python并更新了路径

从Git 2.24(2019年第四季度)开始,您将必须安装Python 3,因为->start_app脚本(在hg-to-git中)已更新为可与Python 3一起使用。

请参见commit d17ae00Hervé Beraud (4383)(2019年9月18日)。
(由Junio C Hamano -- gitster --commit 8f53fe1中合并,2019年10月7日)

  

contrib/使其与python3和python2兼容

     

Python 2将于2019年底停产,许多发行版和系统现在都将python 3作为其默认版本。

     

重写hg-to-git:中使用的功能,这些功能在Python 3中不再受支持,从而使更新的代码仍可在Python 2中使用:

     
      
  • hg-to-git不是陈述;请改用print函数。
  •   
  • print()不再存在;使用“ dict.has_key(key)”。
  •   

答案 4 :(得分:0)

万一它对任何人都有帮助,我花了一段时间才使hg-fast-export正常工作,但是我最终还是到了。这是我遇到的一些问题:

  • 我需要安装Python,还必须将Python二进制目录添加到系统PATH。
  • 说明说要从git bash窗口运行hg-fast-export。在我的第一次尝试中,我什至无法cd到正确的目录,因为我的bash shell使我“被囚禁”到主目录层次结构中。我将git bash快捷方式更改为以管理员身份运行,删除了--cd-to-home参数,并将其设置为以C:开始。请注意,一旦启动外壳程序,路径将以/ c /开头。
  • 在发出命令 git init 创建空仓库后,我还必须发出 git config core.ignoreCase false ,然后导出才能继续。
    • 接下来,我得到了错误“导入错误:没有名为mercurial的模块”。我已经完成了TortoiseHg的二进制安装,但需要安装源。我下载了Mercurial源并将根源目录添加到系统环境变量PYTHONPATH中。然后我重新启动了git bash。
    • 现在git-fast-export起作用了!
    • 根据记录, git状态会将所有文件显示为“已删除”。发出命令 git checkout HEAD ,重复 git status ,它应该显示“什么也没提交,工作树干净”。

答案 5 :(得分:0)

我无法在Windows中进行“快速导出”。我花了很多时间尝试使用“快速导出”(aka hg-fast-export),“ hg-git”和Cygwin从Mercurial(hg)转换为Git的众多推荐方法。他们每个人由于某种原因而失败。其中许多基于Mercurial,Python,Git等旧版本。

最终对我有用的是遵循http://www.lorenzomori.com/programming/convert-your-mercurial-repository-to-git-on-windows/

中Lorenzo Mori的简单指示

答案 6 :(得分:0)

我花了数小时的时间来尝试上述许多解决方案,但对我来说,没有任何一件事情奏效。我在tortoisehg中尝试了快速导出和hggit的各种变体。

最后,我使用GitHub Importer将所有Mercurial存储库导入到GitHub。

我只需要提供存储库的URL(我的存储在BitBucket中),这是一个非常流畅且容易的过程。比尝试让python在git bash,路径变量等中工作要平滑得多!

我还进行了一些重大的本地更改,这些更改我无法推送到bitbucket,因为它们不允许推送。因此,我不得不将这些文件手动复制到git存储库中。

从VCS根目录从bitbucket切换到github时,我也无法获得团队合作感来检测更改。所以我在团队城市中创建了一个新项目。

我希望这可以帮助面临这些挑战的任何人。