我在Mac上使用GIT。我有工具,我有经验。我想继续使用它。这里没有战争……
问题总是与互操作性有关。大多数人使用SVN,这对我来说很棒。Git SVN开箱即用,是一种简单的解决方案。人们可以继续愉快地使用SVN,我也不会丢失我的工作流程和工具。
现在…有些人跟着Mercurial。对他们来说很好:他们有自己的理由。但是我找不到任何现成的GIT HG。我不想切换到HG,但我仍然需要与他们的存储库进行互操作。
你们有谁知道简单的解决办法吗?
我在Mac上使用GIT。我有工具,我有经验。我想继续使用它。这里没有战争……
问题总是与互操作性有关。大多数人使用SVN,这对我来说很棒。Git SVN开箱即用,是一种简单的解决方案。人们可以继续愉快地使用SVN,我也不会丢失我的工作流程和工具。
现在…有些人跟着Mercurial。对他们来说很好:他们有自己的理由。但是我找不到任何现成的GIT HG。我不想切换到HG,但我仍然需要与他们的存储库进行互操作。
你们有谁知道简单的解决办法吗?
当前回答
由于hg-git是一个双向桥接,它还允许您将更改集从Git推到Mercurial。
其他回答
我已经从https://github.com/cosmin/git-hg的git-hg取得了巨大的成功(也需要安装hg)。它支持取,拉和推,对我来说比hg-git更稳定(hg到git的类似功能)。
有关用法示例,请参阅https://github.com/cosmin/git-hg#usage。用户界面非常类似于git-svn。
git-hg对于每个克隆的hg repo都需要额外的磁盘空间。实现使用完整的mercurial克隆,一个额外的git裸克隆和实际的git回购。所需的磁盘空间大约是正常git使用量的3倍。额外的副本存储在工作目录的.git目录下(或通常由GIT_DIR指定的位置)。
注意:git-hg试图解决的基本问题是git和hg特性之间没有1:1的映射。最大的问题是git分支和hg未命名分支以及hg已命名分支和hg书签之间的阻抗不匹配(所有这些在git用户看来都很像分支)。一个相关的问题是hg试图在版本历史中保存原始的命名分支名称,而git在默认情况下只将分支名称添加到模板提交消息中。
任何声称在git和hg之间创建互操作桥梁的工具都应该解释它将如何处理这种阻抗匹配。然后您可以决定所选的解决方案是否适合您的需求。
git-hg使用的解决方案是丢弃所有hg书签,并将命名的分支转换为git分支。此外,它将git主分支设置为默认的未命名hg分支。
你应该可以使用hg-git。
hg clone <hg repository>
编辑~ /。HGRC并添加:
[extensions]
hgext.bookmarks =
hggit =
创建一个书签,这样你就可以在git中拥有一个master:
cd <repository>
hg bookmark -r default master
在仓库中编辑.hg/hgrc并添加:
[git]
intree = true
现在你可以创建git存储库:
hg gexport
您可以使用生成的目录作为git克隆。从mercurial提取如下:
hg pull
hg gexport
然后推到mercurial:
hg gimport
hg push
(是的,你需要在这个工作流中使用hg,但你的黑客将全部在git中)
P.S.如果你对这个工作流程有问题,请提交一个bug。
双向hg-git(和git-git, hg-hg)同步也可以通过服务Git-hg Mirror实现。它在幕后使用hg-git(以及其他),其代码也是开源的。
免责声明:我来自它背后的公司。
由于hg-git是一个双向桥接,它还允许您将更改集从Git推到Mercurial。
我试过hggit。对我来说很管用,因为我得应付那些流浪汉和流浪汉的工作。 特别是对于评论来说,这是很棒的。
关于这个主题的一个小问题/警告:
我尝试用hg克隆一个稳定的linux内核存储库。这些存储库在git中维护,通常有大量的文件。
它非常慢。我花了2天时间完全克隆和更新一个工作副本。