我需要将mercurial项目转换为git项目,但我想保持提交历史完整。我目前的解决方案是删除hg相关文件,然后git init &&手动添加我需要的文件,但这不会保留历史。有什么解决办法吗?
当前回答
来自:
http://hivelogic.com/articles/converting-from-mercurial-to-git
迁移 这是一个相对简单的过程。首先下载快速导出(最好的方法是通过它的Git存储库,我将直接克隆到桌面),然后创建一个新的Git存储库,执行迁移,并签出HEAD。在命令行中,它是这样的:
cd ~/Desktop
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/Desktop/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD
在运行fast-export后迁移项目时,您应该看到一个长长的提交列表。如果您看到错误,它们可能与不正确指定的Python路径有关(请参阅上面的说明并为您的系统自定义)。 就这样,你完成了。
其他回答
另一种选择是创建一个免费的Kiln帐户——在git和hg之间往返,保留100%的元数据,这样您就可以使用它进行一次性转换,或者使用它访问存储库,使用任何您喜欢的客户端。
您可以尝试使用快速导出:
cd ~
git clone https://github.com/frej/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD
也来看看这个SO问题。
如果你使用的是4.6以下的Mercurial版本,adrihanu会支持你:
正如他在他的评论中所说:“如果你使用Mercurial < 4.6,你会得到' revsymbol not found '错误。你需要通过在~/fast-export目录下运行git checkout标签/v180317来更新你的Mercurial或降级快速导出。
这将是一个更好的评论,对不起,我没有评论权限。
@mar10评论是我需要这样做的缺失部分。
注意,'/path/to/old/ mercural_repo '必须是文件系统上的路径(而不是URL),因此您必须在此之前克隆原始存储库。- 13年12月27日3月10日16:30
这条评论是关于为我解决这个问题的答案https://stackoverflow.com/a/10710294/2148757,这与这里标记正确的答案https://stackoverflow.com/a/16037861/2148757相同
这将我们的hg项目移动到git,提交历史完整。
如果您想将现有的mercurial存储库导入到“GitHub”存储库中,现在只需使用这里提供的GitHub导入器[需要登录]。没有更多的混乱的快速导出等(虽然它是一个非常好的工具)
您将获得所有的提交、分支和标记。还有一件很酷的事情是,你还可以更改作者的电子邮件id。看看下面的截图:
来自:
http://hivelogic.com/articles/converting-from-mercurial-to-git
迁移 这是一个相对简单的过程。首先下载快速导出(最好的方法是通过它的Git存储库,我将直接克隆到桌面),然后创建一个新的Git存储库,执行迁移,并签出HEAD。在命令行中,它是这样的:
cd ~/Desktop
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/Desktop/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD
在运行fast-export后迁移项目时,您应该看到一个长长的提交列表。如果您看到错误,它们可能与不正确指定的Python路径有关(请参阅上面的说明并为您的系统自定义)。 就这样,你完成了。
推荐文章
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?
- 跟踪所有远程git分支作为本地分支
- 自定义SSH端口上的Git
- git如何显示不存在于.gitignore中的未跟踪文件
- Git错误:遇到7个文件应该是指针,但不是
- GitHub克隆与OAuth访问令牌
- 移动(或“撤销”)最后一个git提交到非暂存区域
- 我可以在GitHub上对要点进行拉请求吗?
- Hg:如何做一个像git的rebase
- 如何丢弃远程更改并将文件标记为“已解决”?
- 如何查看远程标签?