经过无数次的尝试,我想我找到了一种方法可以始终如一地做我想做的事。为了将来参考,这是步骤:
安装必要的工具
为 Windows 安装 Git
独立安装 Tortoise HG 或 Mercurial
安装 Python 2.7(fast-export 目前不支持 Python 3.X)
打开命令行提示符(以管理员身份运行)。
检查是否可以运行 git、mercurial 和 python,如下所示:
$ git
$ mercurial
$ python
如果您已经安装了上述其他的并且遇到错误,则需要设置路径,在我的情况下,我只需要为 Python 执行此操作。所以我做了:
$ setx path "%path%;C:\Python27"
重新启动命令提示符,一切都应该准备就绪。
安装 fast-export 并克隆 mercurial 和 git 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 中创建的作者文件,确保作者文件与以下内容匹配:
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 Bash here”
然后我让我的本地 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
不幸的是,这些步骤并没有看起来那么快,但这是我发现解决问题的更简洁和一致的方式。
还有一些提示:
- 我没有在新创建的 git repo 中合并任何新代码来掌握。
- 在我完全满意并能够停止同步之前,我将拥有一个包含我日常所做更改的分支,并定期将 master 合并回该分支。
- 不要将此存储库用于开发,快速导出将数据存储在可能丢失的存储库中,并使重新同步项目非常难以实现。将 repos 克隆到一个单独的位置(出于同样的原因,请小心检查此 repos 中的其他分支)。