4

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

由于它是一个公共回购,我不是它的贡献者,我不想推回它。但是,当我克隆父存储库时,我仍然希望自动克隆存储库。一方面,我想访问子存储库的集体历史,这样我就可以看到随着时间的推移可能发生的变化或未发生的变化。

因此,我在父 repo 的.hgsub文件中创建了一个条目,如下所示:

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

并使用克隆回购

$ hg clone https://bitbucket.org/user/repo thesubrepo

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

当我使用这样的条目以相同的方式(托管在 Git 集线器上)创建 Git 子存储库时,我没有观察到这种.hgsub行为

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

不设置子存储库并让 Mercurial 将文件存储为文件对我来说最好吗?或者(最好)是否有一些设置可以用来告诉 Mercurial 永远不要将这个子存储库的内容实际推送回它的源位置?

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

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

4

1 回答 1

4

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

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

我们目前正在研究一个名为阶段的概念。有了这些,Mercurial 将开始跟踪变更集是在本地创建还是已经发布。这也可以用于子存储库:如果子存储库的“公共”阶段只有变更集,则无需尝试推送!

于 2012-01-20T09:49:20.020 回答