17

我一直在尝试使用在 github 上托管项目依赖项的 bitbucket 建立一个项目。使用 Hg-Git Mercurial 插件,我几乎可以到达那里。

但是到了推的时候,事情就变得麻烦了。

Mercurial 子存​​储库的文档指出:

2.4 推送

当您推送时,Mercurial 将自动尝试首先推送当前存储库的所有子存储库。这将确保子存储库中的新变更集在被顶级存储库引用时可用。

但这会导致一个大问题,因为我不想推送所有子存储库(为什么要推送?)——我只有对它们的读取权限,所以 github 不允许这样做。只有主存储库需要推送到远程服务器,但我不知道该怎么做。hg想要控制并推送所有子存储库,无论是否有更改。有没有办法绕过这个功能

唯一需要推动的是.hgsub.hgsubstate。一旦通过替代路由推送它们(更新到不存在子存储库的变更集),就可以更新并从远程存储库中提取更改,但如果我要在使用变更集时再次推送子存储库,整个考验重演。

4

4 回答 4

12

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

于 2010-11-30T16:11:38.307 回答
4

由于 Mercurial 的推送方法,这是不可能的。这是一个设计错误。

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

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

于 2010-10-31T17:51:27.533 回答
2

我认为您应该使用多个存储库;DVCS 像那样工作得更好。

例如,创建一个包含来自 github 的依赖项的存储库。你只需要拉入那个 repo 来获得改变,你永远不会推动。然后,您的项目就有了另一个存储库,用于开发。在这里,您可以自由地做任何您想做的事情。然后你链接到你自己的 hg repo 以获取依赖项。

那是如果我正确理解了您的问题以及您正在尝试做的事情:)

于 2010-10-30T20:28:02.667 回答
0

如果您在子存储库中没有传出变更集,则“推送”实际上应该从远程存储库中检索最新的变更集列表。因此,推送的实际“推送”部分不会发生。我已经成功地将只读 BitBucket 存储库用作子模块。

于 2010-10-30T13:35:02.100 回答