1

我正在研究一个 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”程序有影响?

4

1 回答 1

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 克隆实际上将在内部存储一个隐藏的 git 存储库副本——您可以通过git status从克隆目录中运行来看到这一点。这个隐藏的副本不会在 pull 或 push 时转移,所以如果你真的想摆脱 git 遗产,你可以做另一个克隆:

hg clone path/to/hg/repo path/to/new/repo

如果在某个时候你决定要回到 git,你也可以使用隐藏的 git repo 来做到这一点hg-git

git init path/to/new/git/repo
cd path/to/new/git/repo 
git pull path/to/hg/repo/.hg/git

如果您仍然没有混合存储库,您可以通过hg gexport(part of hg-git) 重新创建它,或者使用git-hghg/brz-bridge 之类的东西 git。另请参阅Git 与 Mercurial 存储库的互操作性

于 2013-05-14T10:19:51.223 回答