我想玩弄一下 Mercurial,所以我试图将我现有的一个存储库转换过来。我在我的 Mac 上运行以下命令:
hg convert myrepos myrepos-hg
该命令成功地导入了我的所有提交,但它没有带来在 Git 存储库中标记的 8 个左右的标签(也没有任何分支)。我是否需要设置一个特殊参数才能将我的标签也导入 Mercurial?
我想玩弄一下 Mercurial,所以我试图将我现有的一个存储库转换过来。我在我的 Mac 上运行以下命令:
hg convert myrepos myrepos-hg
该命令成功地导入了我的所有提交,但它没有带来在 Git 存储库中标记的 8 个左右的标签(也没有任何分支)。我是否需要设置一个特殊参数才能将我的标签也导入 Mercurial?
你的标签是轻量级的 git 标签还是完整的注释标签?hg convert
只转换带注释的标签,但 git 默认创建轻量级标签。我最近在转换我的一个存储库时遇到了这个问题。您可以检查它们如下:
git ls-remote --tags .
运行hg convert
只会转换以 结尾的标签^{}
,带注释的标签。您有 2 个选择:
使用一个小的 shell 脚本和 git-tag 的 --force 选项,您可以注释所有标签。
这是一个众所周知的问题。您可以尝试通过更改以下文件来修补以下文件 /usr/lib/python2.6/site-packages/hgext/convert/hg.py (或它所在的任何位置):
extra = {'branch': self.tagsbranch}
到:
extra = {'branch': 'default'}
然后再次转换。
编辑:在更深入地了解事物的状态时,似乎很难——并非不可能——做你想做的事。更重要的是要正确地做到这一点。
由于您只有 8 个标签,请考虑通过手工制作 .hgtags 文件来省去麻烦。稍后您可以弄清楚“hg convert”是怎么回事(我也会睁大眼睛)。
运气。
我过去看到的一个建议是使用 svn 作为中间步骤。git 和 hg 都具有出色的双向 svn 转换。
查看 hg-git插件。