我需要将mercurial项目转换为git项目,但我希望保持提交历史不变.我目前的解决方案是只删除hg相关文件,然后git init &&手动添加我需要的文件,但这不会保留历史记录.这有什么解决方案吗?
ale*_*oze 266
您可以尝试使用快速导出:
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
Run Code Online (Sandbox Code Playgroud)
另外看看这个SO问题.
Tim*_*mmm 84
好的,我终于解决了这个问题.这是在Windows上使用TortoiseHg.如果您没有使用它,您可以在命令行上执行此操作.
hggit:打开命令行,输入一个空目录.
git init --bare .git (如果你不使用裸仓库,你会收到类似的错误 abort: git remote error: refs/heads/master failed to update
cd 到您的Mercurial存储库.
hg bookmarks hg
hg push c:/path/to/your/git/repo
在Git目录中:( git config --bool core.bare false 不要问我为什么.关于"工作树"的事情.Git非常不友好.我发誓写实际代码比使用Git更容易.)
希望它能够工作,然后你可以从新的git repo推向非裸机版.
atu*_*tri 72
如果要将现有的mercurial存储库导入"GitHub"存储库,现在只需使用此处提供的GitHub Importer [需要登录].没有更多的麻烦与快速出口等(虽然它是一个非常好的工具)
您将完整地提交所有提交,分支和标签.更酷的是,您也可以更改作者的电子邮件ID.查看以下截图:
Dio*_*ter 20
关于将Mercurial转换为Git的经验的一些注释.
使用hg-fast-export失败,我需要--force如上所述.接下来我收到了这个错误:
错误:无法锁定ref'refs/heads/stable':'refs/heads/stable/sub-branch-name'存在; 无法创建'refs/heads/stable'
完成hg-fast-export后,我最终获得了截肢回购.我认为这个回购有好几个孤立的分支,而且hg-fast-export需要一个有点理想化的回购.这一切看起来有点粗糙,所以我转向了Kiln Harmony(http://blog.fogcreek.com/announcing-kiln-harmony-the-future-of-dvcs/)
如上所述,Kiln Harmony似乎不存在于免费套餐账户中.我可以在Git-only和Mercurial-only repos之间进行选择,而且没有切换选项.我提出了支持票,如果他们回复,我会分享结果.
Hg-Git mercurial插件(http://hg-git.github.io/)确实对我有用.在Mac OSX上我是通过macports安装hg-git,如下所示:
.hgrc需要这些行:
[ui]
username = Name Surname <me@mydomain.com>
[extensions]
hgext.bookmarks =
hggit =
Run Code Online (Sandbox Code Playgroud)
然后我成功了:
hg push git+ssh://git@bitbucket.org:myaccount/myrepo.git
Run Code Online (Sandbox Code Playgroud)
以上所有都是钝器,我只是推进,因为它花了足够的时间让团队正确使用git.
在第一次推动项目(3)后,我最终失去了所有新的变化.这是因为这行代码必须仅作为指南:
$ hg bookmark -r default master # make a bookmark of master for default, so a ref gets created
Run Code Online (Sandbox Code Playgroud)
理论上说,当推送到git时,默认分支可以被认为是主要的,在我的情况下,我继承了一个repo,他们使用'stable'作为master的等价物.此外,我还发现repo的尖端是一个尚未与'stable'分支合并的修补程序.
如果没有正确理解Mercurial和要转换的repo,最好不要进行转换.
为了让repo准备好进行第二次转换尝试,我做了以下操作:
hg update -C stable
hg merge stable/hotfix-feature
hg ci -m "Merge with stable branch"
hg push git+ssh://git@bitbucket.org:myaccount/myrepo.git
Run Code Online (Sandbox Code Playgroud)
在此之后,我在git中有一个可验证的等效项目,但是我之前提到的所有孤立的分支都已消失了.我不认为这太严重了,但我可能会因为疏忽而对此感到遗憾.因此,我最后的想法是保留原作.
编辑:如果你只想在git中进行最新的提交,这比上面的合并更简单:
hg book -r tip master
hg push git+ssh://git@bitbucket.org:myaccount/myrepo.git
Run Code Online (Sandbox Code Playgroud)
Rec*_*Hou 10
从:
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
Run Code Online (Sandbox Code Playgroud)
在运行快速导出后,您应该看到一个很长的提交列表,因为您的项目已迁移.如果您看到错误,则可能与未正确指定的Python路径有关(请参阅上面的注释并为您的系统自定义).
就是这样,你已经完成了.
Mat*_*ias 10
我有类似的任务要做,但它包含了其他答案未充分涵盖的一些方面:
我没有尝试快速导出和hg-fast-export,因为它们要求你的机器上有Python和一些Mercurial Python模块,我没有.
我确实尝试过使用TortoiseHG的hg-init,这个答案给了我一个良好的开端.但它看起来只是转换当前分支,而不是一次转换(*).所以我阅读了hg-init文档和这篇博客文章并添加了
[git]
branch_bookmark_suffix=_bookmark
Run Code Online (Sandbox Code Playgroud)
我的mercurial.ini,并做了
hg bookmarks -r default master
hg bookmarks -r my_branch my_branch_bookmark
hg gexport
Run Code Online (Sandbox Code Playgroud)
(对于要转换的每个分支重复第二行,如果在执行第3行之前碰巧再进行一次提交,则重复一次).这会git在.hg其中创建一个文件夹,结果是一个包含所有导出分支的裸Git仓库.我可以克隆这个回购,并根据需要有一个工作副本.
或者差不多......
运行
git status
Run Code Online (Sandbox Code Playgroud)
在我的工作副本上显示所有名称中包含非ASCII字符的文件为未跟踪文件.所以我继续研究并遵循这个建议:
git rm -rf --cached \*
git add --all
git commit
Run Code Online (Sandbox Code Playgroud)
最后,回购已准备好被推到Bitbucket :-)
我也试过这个答案中提到的Github导入器.我使用Bitbucket作为源系统,Github做得相当不错,即它自动转换了所有分支.但是,它显示'?' - 我的提交消息(Web-UI和本地)和文件名(仅限Web-UI)中的所有非ASCII字符的字符,虽然我可以修复上面描述的文件名,但我不知道如何处理提交消息,所以我更喜欢hg-init方法.如果没有编码问题,Github导入器将是一个完美而快速的解决方案(只要你有一个付费的Github帐户,或者可以容忍你的repo是公共的,只要它从Github拉到你的本地机器就可以了).
(*)所以在我发现我必须为我要导出的所有分支添加书签之前.如果你这样做并推送到一个裸(!)回购,就像链接的答案所说,你得到所有分支.
另一个选择是创建一个免费的Kiln帐户 - git和hg之间的窑回程,具有100%的元数据保留,因此您可以使用它进行一次转换或使用它来使用您喜欢的任何客户端访问存储库.
| 归档时间: |
|
| 查看次数: |
103852 次 |
| 最近记录: |