10

我想玩弄一下 Mercurial,所以我试图将我现有的一个存储库转换过来。我在我的 Mac 上运行以下命令:

hg convert myrepos myrepos-hg

该命令成功地导入了我的所有提交,但它没有带来在 Git 存储库中标记的 8 个左右的标签(也没有任何分支)。我是否需要设置一个特殊参数才能将我的标签也导入 Mercurial?

4

4 回答 4

6

你的标签是轻量级的 git 标签还是完整的注释标签?hg convert只转换带注释的标签,但 git 默认创建轻量级标签。我最近在转换我的一个存储库时遇到了这个问题。您可以检查它们如下:

git ls-remote --tags .

运行hg convert只会转换以 结尾的标签^{},带注释的标签。您有 2 个选择:

  • 修补 git.py hgext 转换扩展文件以转换所有类型
  • 在转换之前将您的 git 标签更改为带注释的标签

使用一个小的 shell 脚本和 git-tag 的 --force 选项,您可以注释所有标签。

于 2009-07-19T10:23:57.647 回答
3

这是一个众所周知的问题。您可以尝试通过更改以下文件来修补以下文件 /usr/lib/python2.6/site-packages/hgext/convert/hg.py (或它所在的任何位置):

extra = {'branch': self.tagsbranch}

到:

extra = {'branch': 'default'}

然后再次转换。

编辑:在更深入地了解事物的状态时,似乎很难——并非不可能——做你想做的事。更重要的是要正确地做到这一点。

由于您只有 8 个标签,请考虑通过手工制作 .hgtags 文件来省去麻烦。稍后您可以弄清楚“hg convert”是怎么回事(我也会睁大眼睛)。

运气。

于 2009-07-18T03:59:22.453 回答
1

我过去看到的一个建议是使用 svn 作为中间步骤。git 和 hg 都具有出色的双向 svn 转换。

于 2009-07-18T18:55:48.077 回答
1

查看 hg-git插件

于 2009-07-18T19:02:22.587 回答