在 Windows 中通过 "fast-export" 将 Hg 迁移到 Git
migrate Hg to Git via "fast-export" in Windows
我有一个具有 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"
现在奇怪的事情开始发生了,命令行 window 出现又消失得如此之快我不明白发生了什么,所以我重新启动了之前的命令希望看到消息...我应该尝试数十次,直到能够在打印屏幕中捕获命令行消息,上面写着奇怪的东西:
which: no 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...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
...
与 git 捆绑在一起的 bash 中似乎存在错误。如果直接从 cmd 的 运行ning .sh 文件启动,它不会正确初始化“$@”。
从开始菜单打开 "GIT Bash",然后发出命令:
cd "/D/MyProject-git"
导航至 D:\MyProject-git
,并且
../fast-export-master/hg-fast-export.sh -r "D:\MyProject"
到运行你的脚本
由于您已经安装了 TortoiseHg,因此有一种更简单的方法可以将 hg 迁移到 git。
首先,在 TortoiseHg 中启用 hggit:
TortoiseHg -> 全局设置 -> 扩展选项卡 -> select hggit -> 确定。
然后使用以下命令迁移并推送到 VSTS git 存储库:
# 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
我认为您担心的是您将 "hg-fast-export" 导入到一个未添加到环境变量的目录中,根据错误消息 "D:\fast-export-master\hg-fast-export.sh" was not found in the list of your environment变量,因此请尝试在您的环境变量中添加以下 "D:\fast-export-master\",然后重试。
如果还没有解决,请查看这篇文章并按照所说的逐步进行:
https://www.appveyor.com/blog/2014/02/23/converting-mercurial-repository-to-git-on-windows/
作者已将目录"hg-fast-export"复制到新目录git中(没有"hg-fast-export"的.git)并且还添加了hg,git 和 python 到他的环境变量。
祝你好运
Following the @max630 suggestion bellow, I reinstalled Python and update the PATH
从 Git 2.24(2019 年第 4 季度)开始,您将必须安装 Python 3,因为 hg-to-git
脚本(在 contrib/
中)已更新为与 Python 一起工作 3.
见commit d17ae00 (18 Sep 2019) by Hervé Beraud (4383
)。
(由 Junio C Hamano -- gitster
-- in commit 8f53fe1 合并,2019 年 10 月 7 日)
hg-to-git:
make it compatible with both python3 and python2
Python 2 is EOL at the end of 2019, many distros and systems now come with python 3 as their default version.
Rewrite features used in hg-to-git
that are no longer supported in Python 3, in such a way that an updated code can still be usable with Python 2:
print
is not a statement; use print()
function instead.
dict.has_key(key)
is no more; use "key in dict
" instead.
为了帮助任何人,我花了一段时间才让 hg-fast-export 开始工作,但我最终做到了。以下是我 运行 关注的一些问题:
- 我需要安装 Python 并且还必须将 Python 二进制目录添加到系统路径中。
- 说明说 运行 hg-fast-export 来自 git bash window。在我第一次尝试时,我什至无法 cd 到正确的目录,因为我的 bash shell 让我 "jailed" 到我的主目录层次结构。我以管理员身份将 git bash 快捷方式更改为 运行,删除了 --cd-to-home 参数,并将其设置为从 C: 开始。请注意,一旦启动 shell,路径将以 /c/.
开头
- 在发出命令 git init 来创建一个空的 repo 之后,我还必须发出 git config core.ignoreCase false 之前导出会走得更远。
- 接下来我得到错误 "ImportError: No module named mercurial"。我已经完成了 TortoiseHg 的二进制安装,但它需要源代码。我下载了Mercurial源码,并将源码根目录添加到系统环境变量PYTHONPATH中。然后我重新启动gitbash.
- 现在 git-快速导出成功了!
- 如文档所述,git status 会将所有文件显示为 "deleted"。发出命令 git checkout HEAD,重复 git status,它应该显示 "nothing to commit, working tree clean".
我花了很多时间尝试上述许多解决方案,但没有一个适合我。我在 tortoisehg 中尝试了 fast-export 和 hggit 的多种变体。
最后我使用 GitHub Importer 将我所有的 mercurial 存储库导入 GitHub。
我只需要提供存储库的 URL(我的在 BitBucket 中),这是一个非常顺利和简单的过程。比尝试让 python 在 git bash、路径变量等中工作要顺利得多!
我还有一些重大的本地更改无法推送到 bitbucket,因为它们不允许推送。所以我不得不手动将这些文件复制到 git 存储库中。
当从 VCS roots 从 bitbucket 切换到 github 时,我也无法让 teamcity 检测到变化。所以我在team city新建了一个项目。
我希望这对面临这些挑战的任何人有所帮助。
我有一个具有 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"
现在奇怪的事情开始发生了,命令行 window 出现又消失得如此之快我不明白发生了什么,所以我重新启动了之前的命令希望看到消息...我应该尝试数十次,直到能够在打印屏幕中捕获命令行消息,上面写着奇怪的东西:
which: no 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...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
...
与 git 捆绑在一起的 bash 中似乎存在错误。如果直接从 cmd 的 运行ning .sh 文件启动,它不会正确初始化“$@”。
从开始菜单打开 "GIT Bash",然后发出命令:
cd "/D/MyProject-git"
导航至 D:\MyProject-git
,并且
../fast-export-master/hg-fast-export.sh -r "D:\MyProject"
到运行你的脚本
由于您已经安装了 TortoiseHg,因此有一种更简单的方法可以将 hg 迁移到 git。
首先,在 TortoiseHg 中启用 hggit:
TortoiseHg -> 全局设置 -> 扩展选项卡 -> select hggit -> 确定。
然后使用以下命令迁移并推送到 VSTS git 存储库:
# 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
我认为您担心的是您将 "hg-fast-export" 导入到一个未添加到环境变量的目录中,根据错误消息 "D:\fast-export-master\hg-fast-export.sh" was not found in the list of your environment变量,因此请尝试在您的环境变量中添加以下 "D:\fast-export-master\",然后重试。
如果还没有解决,请查看这篇文章并按照所说的逐步进行:
https://www.appveyor.com/blog/2014/02/23/converting-mercurial-repository-to-git-on-windows/
作者已将目录"hg-fast-export"复制到新目录git中(没有"hg-fast-export"的.git)并且还添加了hg,git 和 python 到他的环境变量。
祝你好运
Following the @max630 suggestion bellow, I reinstalled Python and update the PATH
从 Git 2.24(2019 年第 4 季度)开始,您将必须安装 Python 3,因为 hg-to-git
脚本(在 contrib/
中)已更新为与 Python 一起工作 3.
见commit d17ae00 (18 Sep 2019) by Hervé Beraud (4383
)。
(由 Junio C Hamano -- gitster
-- in commit 8f53fe1 合并,2019 年 10 月 7 日)
hg-to-git:
make it compatible with both python3 and python2Python 2 is EOL at the end of 2019, many distros and systems now come with python 3 as their default version.
Rewrite features used in
hg-to-git
that are no longer supported in Python 3, in such a way that an updated code can still be usable with Python 2:
print()
function instead.dict.has_key(key)
is no more; use "key in dict
" instead.
为了帮助任何人,我花了一段时间才让 hg-fast-export 开始工作,但我最终做到了。以下是我 运行 关注的一些问题:
- 我需要安装 Python 并且还必须将 Python 二进制目录添加到系统路径中。
- 说明说 运行 hg-fast-export 来自 git bash window。在我第一次尝试时,我什至无法 cd 到正确的目录,因为我的 bash shell 让我 "jailed" 到我的主目录层次结构。我以管理员身份将 git bash 快捷方式更改为 运行,删除了 --cd-to-home 参数,并将其设置为从 C: 开始。请注意,一旦启动 shell,路径将以 /c/. 开头
- 在发出命令 git init 来创建一个空的 repo 之后,我还必须发出 git config core.ignoreCase false 之前导出会走得更远。
- 接下来我得到错误 "ImportError: No module named mercurial"。我已经完成了 TortoiseHg 的二进制安装,但它需要源代码。我下载了Mercurial源码,并将源码根目录添加到系统环境变量PYTHONPATH中。然后我重新启动gitbash.
- 现在 git-快速导出成功了!
- 如文档所述,git status 会将所有文件显示为 "deleted"。发出命令 git checkout HEAD,重复 git status,它应该显示 "nothing to commit, working tree clean".
我花了很多时间尝试上述许多解决方案,但没有一个适合我。我在 tortoisehg 中尝试了 fast-export 和 hggit 的多种变体。
最后我使用 GitHub Importer 将我所有的 mercurial 存储库导入 GitHub。
我只需要提供存储库的 URL(我的在 BitBucket 中),这是一个非常顺利和简单的过程。比尝试让 python 在 git bash、路径变量等中工作要顺利得多!
我还有一些重大的本地更改无法推送到 bitbucket,因为它们不允许推送。所以我不得不手动将这些文件复制到 git 存储库中。
当从 VCS roots 从 bitbucket 切换到 github 时,我也无法让 teamcity 检测到变化。所以我在team city新建了一个项目。
我希望这对面临这些挑战的任何人有所帮助。