Hug*_*ira 194 git version-control mercurial interop dvcs
我在Mac上使用GIT.说够了.我有工具,我有经验.我想继续使用它.这里没有战争......
问题始终在于互操作性.大多数人都使用SVN,这对我来说很棒.Git SVN开箱即用,是一个没有多余装饰的解决方案.人们可以继续愉快地使用SVN,我不会丢失我的工作流程,也不会丢失我的工具.
现在......有些人和Mercurial一起来了.对他们来说很好:他们有他们的理由.但我找不到任何GIT HG开箱即用.我不想切换到HG,但我仍然需要与他们的存储库进行互操作.
你们中的任何人都知道一个简单的解决方案吗?
Fel*_*peC 114
有一个新的git-remote-hg提供原生支持:
只需将git-remote-hg复制到$ PATH,使其成为可执行文件,就是这样,没有依赖项(Mercurial除外):
git clone hg::https://www.mercurial-scm.org/repo/hg/
Run Code Online (Sandbox Code Playgroud)
您应该能够从它推送和拉出,就像它是一个本机Git存储库一样.
当您推送新的Git分支时,将为它们创建Mercurial书签.
有关更多信息,请参阅git-remote-hg wiki.
Abd*_*uni 106
你应该能够使用hg-git.
hg clone <hg repository>
Run Code Online (Sandbox Code Playgroud)
编辑~/.hgrc并添加:
[extensions]
hgext.bookmarks =
hggit =
Run Code Online (Sandbox Code Playgroud)
创建一个书签,这样你就有了一个mastergit:
cd <repository>
hg bookmark -r default master
Run Code Online (Sandbox Code Playgroud)
.hg/hgrc在存储库中编辑并添加:
[git]
intree = true
Run Code Online (Sandbox Code Playgroud)
现在你可以创建git仓库了:
hg gexport
Run Code Online (Sandbox Code Playgroud)
并且您可以将结果目录用作git clone.从mercurial拉出来的将是:
hg pull
hg gexport
Run Code Online (Sandbox Code Playgroud)
并推动mercurial:
hg gimport
hg push
Run Code Online (Sandbox Code Playgroud)
(是的,您需要在此工作流程中使用hg,但您的黑客将全部使用git)
PS如果您对此工作流程有疑问,请提交错误.
dub*_*jim 59
从2012年6月开始更新.目前,当开发人员想要从git端工作时,似乎有以下Git/Hg互操作性方法:
安装Mercurial和hg-git扩展.您可以使用包管理器或使用包管理器来执行后者easy_install hg-git.然后确保以下内容在〜/ .hgrc中:
[extensions]
hggit =
Run Code Online (Sandbox Code Playgroud)
您可能会在bookmarks这里看到一些关于指定扩展名的引用,但是从1.8开始就已经内置到Mercurial中.以下是有关在Windows上安装hg-git的一些提示.
一旦你有了hg-git,就可以像上面发布的Abderrahim Kitouni一样使用命令.自2009年以来,这种方法已得到改进和调整,并且有一个友好的包装器:git-hg-again.这使用toplevel目录作为Mercurial和Git的工作目录.它创建一个Mercurial书签,它与defaultMercurial存储库中(未命名的)分支的提示保持同步,并从该书签更新本地Git分支.
git-remote-hg是一个不同的包装器,也基于Mercurialhg-git扩展.这另外利用了git-remote-helpers协议(因此得名).它仅将forplevel目录用于Git工作目录; 它保持其Mercurial存储库裸露.它也保持了第二裸Git仓库,使Git和水银更安全,更惯用gitlike之间synching.
该混帐-HG脚本(前身为维护这里)使用不同的方法的基础上,hg-fast-export从快速出口项目.与方法2一样,这也保留了一个简单的Mercurial存储库和一个额外的裸Git存储库.
对于提取,此工具忽略Mercurial书签,而是将每个命名的Mercurial分支导入Git分支,并将默认(未命名)Mercurial分支导入master.
一些评论讨论这个工具只是hg-> git,但它声称已经在2011年12月7日合并了git-> hg push支持.正如我在对这些工具的回顾中解释的那样,这个工具试图实现的方式推动支持似乎不可行.
还有另一个名为git-remote-hg的项目.与上面列出的版本不同,这个版本不依赖于hg-git,而是直接访问Mercurial Python API.目前,使用它还需要修补版本的git.我还没试过这个.
最后,Tailor是一个逐步在各种不同VCS之间进行转换的项目.听起来这种发展不会积极地继续下去.
前三种方法看起来很轻巧,足以说服我调查.我需要在某些方面调整它们以使它们在我的设置上运行,并且我看到了一些方法来进一步调整它们以改进它们,然后我进一步调整它们以使它们更像彼此,以便我可以评估他们更有效.然后我认为其他人可能也想进行这些调整,以进行相同的评估.所以我已经制作了一个源代码包,可以让你安装前三个工具中的任何一个版本.它还应该注意安装所需的hg-fast-export部件.(您需要自己安装hg-git.)
我鼓励你尝试一下,然后自己决定什么是最好的.我很高兴听到这些工具破裂的情况.我会尽力让他们在与上游的变化同步,并确保上游作者都知道,我认为是有用的调整的.
正如我上面提到的,在评估这些工具时,我得出的结论git-hg是,只能用于从Mercurial中提取,而不是用于推送.
相关地,以下是Git和Mercurial之间的一些有用的比较/翻译手册,在某些情况下针对已经了解Git的用户:
syk*_*ora 15
您可以尝试hg2git,这是python脚本并且是快速导出的一部分,您可以在http://repo.or.cz/w/fast-export.git找到它.
你需要安装mercurial.
我git-hg从https://github.com/cosmin/git-hg取得了巨大的成功(也需要工作安装hg).它支持fetch,pull和push,对我来说比hg-git(hggit中的类似功能)更稳定.
有关用法示例,请参阅https://github.com/cosmin/git-hg#usage.用户界面非常相似git-svn.
该git-hg要求每个克隆的汞回购额外的磁盘空间.该实现使用完整的mercurial clone,一个额外的git bare clone和实际的git repo.所需的磁盘空间大约是正常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 master分支设置为默认的未命名hg分支.
| 归档时间: |
|
| 查看次数: |
44572 次 |
| 最近记录: |