2010-10-30 63 views
16

我一直在尝试使用在github上托管项目依赖项的bitbucket来设置一个项目。使用Hg-Git Mercurial插件,我几乎能够到达那里。添加一个Git subrepository到Mercurial

但是,当推动时,事情变得麻烦。

的文档Mercurial subrepositories状态:

2.4推送

水银会自动尝试首先按当前存储库的所有subrepos当你推。这将确保subrepos中的新变更集在顶级存储库引用时可用。

但是,这会导致一个大问题,因为我不想要把所有的subrepositories(为什么要我?) - 我只看过对它们的访问,这样github上不会允许它。只有主存储库需要被推送到远程服务器,但我不知道如何去做。无论是否有变化,hg都想要控制并推送所有子库。有没有办法绕过这个功能

唯一需要推送的东西是.hgsub.hgsubstate。一旦通过其他路径推送它们(更新到不存在子库的变更集),就可以更新并从远程存储库中提取更改,但是如果我在变更集整个考验都会重演。

回答

4

这是不可能的,因为推Mercurial的方法是什么。这是一个由设计错误。

最好的解决方案是更新到以前的版本,其中子存储库不存在,然后推送。这将绕过Mercurial的限制并上传必需的.hgsub.hgsubstate文件。这有点不方便,但这是我迄今发现的让Mercurial和Git相互协作的最佳方式。

也许将来Hg-Git会自动更新以处理这个用例。

+0

这是一个错误,表明当使用github,hg-git和子库功能时,尝试使用本机git subrepository – 2012-08-25 14:24:06

0

如果您在子库中没有外出的变更集,那么除了从远程存储库中检索最新的变更集列表外,“推送”实际上应该什么都不做。因此,推动的实际“推动​​”部分将不会发生。我已成功使用只读BitBucket存储库作为子模块。

+0

是的,它的确如此 - 但是推送确实发生了,只是如果没有改变,那么什么都不会上传。 Github会在检查是否有任何变化之前强制您验证自己的身份。所以为了这个工作,推动需要被完全忽略。 – summatix 2010-10-30 17:48:03

1

我想你应该使用多个存储库; DVCS的效果更好。

例如,使一个存储库包含来自github的依赖关系。你只需拉回该回购就可以获得所需的变更,你永远不会推。 然后你有另一个项目库,用于开发。在这里,你可以自由地做任何你想做的事情。然后你链接到你自己的hg repo以获得依赖关系。

,如果我理解正确的问题,你正在试图做:)

+1

对不起,我不明白。我的问题是我需要Mercurial和Git很好地与对方玩 - 他们是这么做的。但是,所谓的功能只会让事情变得有点麻烦。 – summatix 2010-10-30 22:00:25

+0

这不是一个“所谓的功能”,这是使用hg的重要步骤。推/拉将您的本地存储库与远程存储库同步。我所建议的是,您可能需要一个不同的存储库配置来完成您要做的事情;使用git/mercurial为您的项目提供多个存储库时很常见。推动你的mercurial回购不应该影响你想从github获得的东西,当然你不应该推入github回购。 – 2010-10-30 23:11:58

+1

我们很清楚这里有不同的比赛场地 – summatix 2010-10-30 23:58:36

11

为了将来的参考,mercurial的开发分支(以及即将发布的1.8版本)现在支持native git subrepos。这种特殊情况非常好地实现,如果其远程存储库不知道具有当前提交,则从根存储库推送只会告诉git子推送。

+0

这里是一些细节的本地支持git subrepo的里面mecurial http://mercurial.selenic.com/wiki/Subrepository#Git_subrepositories – 2011-07-13 15:38:37