我在Mac上使用GIT。我有工具,我有经验。我想继续使用它。这里没有战争……
问题总是与互操作性有关。大多数人使用SVN,这对我来说很棒。Git SVN开箱即用,是一种简单的解决方案。人们可以继续愉快地使用SVN,我也不会丢失我的工作流程和工具。
现在…有些人跟着Mercurial。对他们来说很好:他们有自己的理由。但是我找不到任何现成的GIT HG。我不想切换到HG,但我仍然需要与他们的存储库进行互操作。
你们有谁知道简单的解决办法吗?
我在Mac上使用GIT。我有工具,我有经验。我想继续使用它。这里没有战争……
问题总是与互操作性有关。大多数人使用SVN,这对我来说很棒。Git SVN开箱即用,是一种简单的解决方案。人们可以继续愉快地使用SVN,我也不会丢失我的工作流程和工具。
现在…有些人跟着Mercurial。对他们来说很好:他们有自己的理由。但是我找不到任何现成的GIT HG。我不想切换到HG,但我仍然需要与他们的存储库进行互操作。
你们有谁知道简单的解决办法吗?
当前回答
我试过hggit。对我来说很管用,因为我得应付那些流浪汉和流浪汉的工作。 特别是对于评论来说,这是很棒的。
关于这个主题的一个小问题/警告:
我尝试用hg克隆一个稳定的linux内核存储库。这些存储库在git中维护,通常有大量的文件。
它非常慢。我花了2天时间完全克隆和更新一个工作副本。
其他回答
您可以尝试hg2git,这是一个python脚本,是fast-export的一部分,您可以在http://repo.or.cz/w/fast-export.git上找到它。
不过,您需要安装mercurial。
2012年6月更新。目前,当开发者想从Git端工作时,Git/Hg的互操作性似乎有以下几种方法:
安装Mercurial和hg-git扩展。您可以使用包管理器或easy_install hg-git完成后一项操作。然后确保你的~/.hgrc中有以下文件: (扩展) hggit =
您可能会在这里看到一些关于指定书签扩展的参考,但这是自v 1.8以来内置到Mercurial的。这里有一些关于在Windows上安装hg-git的提示。
一旦你有hg-git,你可以使用类似Abderrahim Kitouni上面发布的命令。自2009年以来,这个方法已经得到了改进和调整,并且有一个友好的包装器:git-hg-again。这将同时使用顶层目录作为Mercurial和Git的工作目录。它创建一个与Mercurial存储库中默认(未命名)分支的提示保持同步的Mercurial书签,并从该书签更新本地Git分支。
git-remote-hg is a different wrapper, also based on the Mercurial hg-git extension. This additionally makes use of the git-remote-helpers protocols (hence its name). It uses the toplevel directory only for a Git working directory; it keeps its Mercurial repository bare. It also maintains a second bare Git repository to make synching between Git and Mercurial safer and more idiomatically gitlike. The git-hg script (formerly maintained here) uses a different method, based on hg-fast-export from the fast-export project. Like method 2, this also keeps a bare Mercurial repository and an additional bare Git repository.
对于拉取,该工具忽略Mercurial书签,而是将每个已命名的Mercurial分支导入Git分支,并将默认的(未命名的)Mercurial分支导入master。
一些评论讨论这个工具只是hg->git,但它声称已经在2011年12月7日合并到git->hg推送支持中。但是,正如我在对这些工具的回顾中所解释的那样,这个工具试图实现推送支持的方式似乎并不可行。
还有另一个项目叫做git-remote-hg。与上面列出的版本不同,这个版本不依赖hg-git,而是直接访问Mercurial Python API。目前,使用它还需要一个补丁版本的git。我还没试过。 最后,Tailor是一个在各种不同的vcs之间进行增量转换的项目。听起来这方面的发展不会继续下去。
The first three of these approaches looked lightweight enough to persuade me to investigate. I needed to tweak them in some ways to get them to run on my setup, and I saw some ways to tweak them further to improve them, and then I tweaked them still further to make them behave more like each other so that I could evaluate them more effectively. Then I thought others might like to have these tweaks too, to do the same evaluation. So I've made a source package that will enable you to install my versions of any of the first three tools. It should also take care of installing the needed hg-fast-export pieces. (You need to install hg-git on your own.)
我鼓励你尝试一下,自己决定哪种效果最好。我很高兴听到这些工具坏了的情况。我将努力使它们与上游的更改保持同步,并确保上游作者意识到我认为有用的调整。
正如我上面提到的,在评估这些工具时,我得出的结论是git-hg只能用于从Mercurial提取,而不能用于推送。
相关的,这里有一些Git和Mercurial之间有用的比较/翻译手册,在某些情况下针对已经了解Git的用户:
针对Git用户的Mercurial Git和Mercurial -比较和对比 Mercurial和Git的区别是什么 Mercurial和Git:技术上的比较 去罗塞塔石碑 自制编码:Mercurial Francisoud的博客:Git vs Mercurial Git vs Mercurial
我已经尝试了cosmin的git-hg和abourget的git-hg-again都在mutt的hg回购,似乎后者尊重一个合并的顺序好,前者有点随机。你可以从下面的截图中看到。
cosmin的git-hg导入mutt的合并历史图:
abourget's git-hg-again导入mutt的合并历史图:
hgk在mutt's hg库上绘制的实际历史图:
正如你从上面看到的,abourget的git-hg-第二个图非常接近原始的hgk图,实际上反映了mutt的真实工作流程。
我再次发现git-hg的一个缺点是它没有添加一个'hg'远程,而是将所有的引用作为本地标签导入,git-hg有一个很好的'hg'远程表示上游hg repo。
Hg-Git Mercurial插件。我自己还没试过,但可能值得一试。
我试过hggit。对我来说很管用,因为我得应付那些流浪汉和流浪汉的工作。 特别是对于评论来说,这是很棒的。
关于这个主题的一个小问题/警告:
我尝试用hg克隆一个稳定的linux内核存储库。这些存储库在git中维护,通常有大量的文件。
它非常慢。我花了2天时间完全克隆和更新一个工作副本。