我有一个mercurial存储库,其中包含我试图逐渐拆分的整体项目。在做这些时,我想我会将新的子项目转换为git,因此单向同步。
关于我正在做的事情的更多细节:
到目前为止,我尝试了一些工具,例如fast-export,mercurial hg hggit插件。但是我很难找到好的一步一步的工具。 (以及此线程中的几乎所有方法Convert Mercurial project to Git)
快速导出是给我最好结果的工具,我能够一次性迁移项目,但是当我尝试重新同步时,我开始出现错误,例如分支修改为外部和多个头。
现在我更详细地解释了我的问题,我可以提出这个问题。
使用单向hg到git迁移的最佳方法和工具是什么?
另外,如何确保我的mercurial存储库配置正确,以避免在迁移到git时出现任何潜在问题?
答案 0 :(得分:3)
经过无数次的尝试,我想我找到了一种以一致的方式做我想做的事情的方法。为了将来参考,这是以下步骤:
安装Git for Windows
安装Tortoise HG或Mercurial standalone
安装Python 2.7(快速导出目前不支持Python 3.X)
打开命令行提示符(以管理员身份运行)。
检查是否可以运行git,mercurial和python,如下所示:
$ git
$ mercurial
$ python
如果您已经安装了上面的其他内容并且您遇到错误,则需要设置路径,在我的情况下,我只需要为Python执行此操作。所以我做了:
$ setx path "%path%;C:\Python27"
重新启动命令提示符,一切都准备好了。
创建一个干净的目录,以便工作将包含在那里(在我的情况下,除了同步项目之外,我不会在此目录中使用repos)。例如:
c:\syncprojects
从c:\syncprojects
内部开始克隆快速导出
$ git clone https://github.com/frej/fast-export.git fast-export
然后克隆mercurial项目
$ hg clone https://bitbucket.org/user/mercurialrepo
然后将要同步的git项目克隆到
$ git clone https://bitbucket.org/user/gitrepo gitrepo
它帮助我正确配置了作者文件,所以我做了
$ cd mercurialrepo
$ hg log | grep user: | sort | uniq | sed 's/user: *//' > ../authors
然后打开在c:\ syncprojects中创建的authors文件,确保authors文件与此类似:
bob=Bob Jones <bob@company.com>
bob@localhost=Bob Jones <bob@company.com>
bob <bob@company.com>=Bob Jones <bob@company.com>
下一步是启动实际迁移,这一步我用的git的bash所以我也感觉舒服多了:在Windows资源管理器,右击gitrepo文件夹并选择“混帐击这里”
然后我使我的本地git repo区分大小写,这对过程很有帮助,但它是一件好事,因为我在过去遇到了区分大小写的文件夹的问题。只是做:
git config core.ignoreCase false
最后我做了:
$ c:\syncprojects\fast-export\hg-fast-export.sh -r c:\syncprojects\mercurialrepo -A c:\syncprojects\authors --force
如果一切顺利(并且这不一定总是发生,由于多种原因,我在mercurial中遇到问题,我试图同步到git repo中的本地更改问题)。
我们需要做的就是检查头部并将更改推送到远程,如下:
$ git checkout HEAD
$ git push -u origin master
下次要进行同步时,只需重复最后一部分:
$ c:\syncprojects\fast-export\hg-fast-export.sh -r c:\syncprojects\mercurialrepo -A c:\syncprojects\authors --force
$ git checkout HEAD
$ git push -u origin master
不幸的是,这些步骤并不像看上去那么快,但这是我发现解决问题的更简洁和一致的方法。
还有一些提示: