我正在开发一个git存储库,现在出于某种原因,我需要将其转换为hg存储库。我最初的git存储库有41次提交,大小为320MB。
我正在尝试使用hg convert git-repo hg-repo
转换存储库。此命令开始将git-reo转换为hg,但在版本号18的中途挂起(不停止)。我检查了一下,此时hg回购的规模是50Mb。我知道版本号18和大小=15M没有那么重要,但hg-convert没有打印任何我可以调试的错误。
hg是否在某个未知位置打印错误?存储库的大小对"hg-convert"程序有影响吗?
hg convert
在我的经验中并不是最容易使用的工具,但hg-git
对我来说一直都是完美的。既然你刚才提到git存储库有一些问题,你应该尝试一个完整性检查:
git fsck-objects --full
(我假设存储库是本地的,但如果不是,请制作一个本地克隆并在那里进行检查。)
这应该没有必要,但可以在继续之前强制进行垃圾收集:
git gc
如果你真的很偏执,你可以再做一次诚信检查。使用hg git
(确保在.hgrc
中安装并启用了它),可以很容易地进行本地Mercurial克隆:
hg clone path/to/git/repo path/to/hg/repo
(这可能需要一些时间——您正在逐一查看修订并重新保存。)
现在,hg克隆实际上将在内部存储git repo的隐藏副本——您可以通过在克隆的目录中运行git status
来看到这一点。这个隐藏的副本不会在拉或推时传输,所以如果你真的想摆脱git遗产,你可以做另一个克隆:
hg clone path/to/hg/repo path/to/new/repo
如果在某个时刻您决定返回git,您也可以使用hg-git
:中的隐藏git repo来执行此操作
git init path/to/new/git/repo
cd path/to/new/git/repo
git pull path/to/hg/repo/.hg/git
如果您仍然没有混合回购,您可以通过hg gexport
(hg-git
的一部分)在适当的位置重新创建它,或者使用git-hg或hg/brz桥之类的东西来实现git。另请参阅Git与Mercurial Repository的互操作性。