将git repo转换为mercurial repo

时间:2012-02-11 12:16:59

标签: git mercurial hg-git

我正在开发一个git存储库,现在我需要将其转换为hg存储库。我原来的git存储库有41个提交,大小为320MB。

我正在尝试使用hg convert git-repo hg-repo转换存储库。此命令开始将git repo转换为hg,但在版本号18的中途挂起(不停止)。我检查此时hg repo的大小是50Mb。我知道转号没有。 18和size = 15M并不重要,但是hg convert没有打印出我可以调试的任何错误。

hg是否在某个未知位置打印错误?存储库的大小是否会对“hg convert”程序产生影响?

1 个答案:

答案 0 :(得分:1)

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 clone实际上有一个内部存储的git repo的隐藏副本 - 你可以通过在克隆目录中运行git status来看到这一点。这个隐藏的副本不会在pull或push上传输,所以如果你真的想要摆脱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 gexporthg-git的一部分)或使用git-hg或{{ 3}}。另见hg/brz-bridge for git