具有bitbucket子存储库的Mercurial存储库 - 如何防止推送

时间:2012-01-20 02:21:38

标签: mercurial dvcs bitbucket subrepos kiln

我正在Mercurial存储库下设置一些第三方子存储库。一个subrepo是在Bitbucket上托管的另一个Mercurial仓库。

由于它是一个公共回购,而我不是它的贡献者,我不想再回过头来。但是,当我克隆父存储库时,我仍希望自动克隆存储库。首先,我想访问子存储库的集体历史记录,以便我可以看到随着时间的推移可能会发生什么变化。

所以,我在父repo的.hgsub文件中输入了如下内容:

thesubrepo = https://bitbucket.org/user/repo

并使用

克隆回购
$ hg clone https://bitbucket.org/user/repo thesubrepo

我做了一个记录subrepo状态的提交。然后,我把我的父回购推回到它的服务器(Kiln),却发现它试图将subrepo推回到Bitbucket服务器。但是,推送到Bitbucket子存储库似乎没有做任何事情。

当我使用.hgsub中的条目以相同的方式(在Git中心托管)制作Git子参数时,我没有观察到这种行为

abc = [git]git://github.com/xyz/abc

最好不要通过不设置子存储库来实现这一点,只是让Mercurial将文件存储为文件?或者(最好)是否有某些设置我可以用来告诉Mercurial永远不会真正将这个subrepo的内容推回到它的源位置?

我宁愿能够将其配置为仅手动推送那些子版块,所以如果有人能够对此有所了解,我将不胜感激。

我在另一个堆栈溢出答案中找到了对commitsubrepos = no的引用,据我所知,这是关于提交,而不是推送子存储库。然后我查了一下on the mercurial website,希望可能会有一些关于推送subrepos的设置,但是......没有

1 个答案:

答案 0 :(得分:4)

你不能(目前,从版本2.0开始)要求Mercurial不推送子存储库。

基本问题是Mercurial必须确保在推送时在远程存储库上具有一致的状态。如果你可以推回到Kiln然后在那里有一个引用了Bitbucket上不存在的版本的变更集,那将是不安全。 Mercurial不知道您在本地发布的变更集是否已发布或是否已创建 - 因此必须(尝试)推送。

我们目前正致力于concept called phases。有了这个,Mercurial将开始跟踪是否在本地创建或已发布变更集。这也可以用于子库:如果子库中的“公共”阶段只有变更集,那么就没有必要尝试推送了!