我一直在尝试使用bitbucket建立一个项目,该项目依赖项托管在github上。使用Hg-Git Mercurial插件,我几乎可以到达那里。
但是到了推动的时候,事情会变得麻烦。
Mercurial subrepositories州的文档:
2.4推送
当您推送时,Mercurial将自动尝试首先推送当前存储库的所有子目录。这将确保在由顶级存储库引用时,subrepos中的新变更集可用。
但这会引起一个大问题,因为我不想推送所有的子库(我为什么会这样?) - 我只有读取权限,所以github不会允许它。只需要将主存储库推送到远程服务器,但我无法弄清楚如何做到这一点。无论是否有变化,hg
都希望控制并推送所有子存储库。有没有办法绕过这个功能?
唯一需要推送的内容是.hgsub
和.hgsubstate
。一旦他们通过替代路由推送(更新到不存在子存储库的变更集),就可以更新并从远程存储库中提取更改,但是如果我要在变更集上再次推送子仓库,整个考验重演。
答案 0 :(得分:12)
为了将来参考,mercurial的开发分支(以及即将发布的1.8版本)现在支持本机git子目录。这个特殊情况非常好地实现,如果不知道其远程存储库是否具有当前提交,则从根存储库推送只会告诉git subrepo推送。
答案 1 :(得分:4)
由于Mercurial的推送方法,这是不可能的。这是按设计错误。
最佳解决方案是更新到子存储库不存在的先前版本,然后推送。这将绕过Mercurial的限制并上传必要的.hgsub
和.hgsubstate
文件。这有点不方便,但是到目前为止我发现Mercurial和Git彼此合作的最佳方式。
将来可能会更新Hg-Git以自动处理此用例。
答案 2 :(得分:2)
我认为你应该使用多个存储库; DVCS的效果更好。
例如,创建一个包含来自github的依赖项的存储库。你只需要用那个仓库来获取变化,你永远不会推动。 然后,您有另一个项目存储库,用于开发。在这里,您可以随意做任何事情。然后链接到您自己的hg repo以获取依赖项。
如果我正确地理解了你的问题以及你想要做什么,那就是这样的。)
答案 3 :(得分:0)
如果子存储库中没有传出的变更集,那么除了从远程存储库中检索最新的变更集列表之外,“推送”实际上应该什么都不做。因此,推动的实际“推动”部分不会发生。我已成功使用只读BitBucket存储库作为子模块。