5

I have a project, which I have a bitbucket repository for, and it is dependent on another project that I incorporate as a subrepo. Now, I don't have push access to the subrepository, nor do I want or need to--it's a pull-only relationship.

I realize that when you push the main repository, it will try to push the subrepositories, as well. Since I cannot do that, I pulled a local copy of the dependent project, at the same level as the main repository's directory. In essence, I have the following layout:

Main/           ; pushes to https://mine.org/Main
  .hg/
  .hgsub
  Lib/
    SubRepo/    ; clone of Main/../SubRepo/
      .hg/

SubRepo/        ; local copy of https://forbidden.org/SubRepo
  .hg/

The content of .hgsub is something like,

Lib/SubRepo = ../SubRepo

Then I cloned,

~/path/to/Main $ hg clone ../SubRepo/ Lib/SubRepo

So far, so good. The problem is, after I set this all up and committed the changes, when I try to push Main Mercurial will try to push SubRepo to https://mine.org/SubRepo, which does not exist, thereby failing the whole push operation.

Is there something I'm missing?

4

2 回答 2

4

为什么不直接创建一个https://mine.org/SubRepo - 如果您不想宣传它,您可以随时在其文件hide[web]部分中打开它。.hg/hgrc这是我习惯的模式,您可以在您将使用它们的每个地方以相同的布局克隆主存储库和所有子存储库:您的开发框和面向 Web 的 hgweb 安装。

或者,您可以[subpaths]在其中使用类似以下内容的部分Main/.hg/hgrc

[subpaths]
https://mine.org/SubRepo = https://forbidden.org/SubRepo

这应该让你拦截推的派生目标并将其指向一个它不会让你推的地方,会让你看到没有任何变化,所以推可以继续。

于 2011-02-24T05:13:28.660 回答
1

Mercurial 所做的似乎是合法的:使用您的 .hgsub 中列出的路径,它试图推送到一个名为“SubRepo”的目录,该目录存在于 Main 的上一级。这显然不是你想要的,所以你可能不得不在这里施展魔法。我可以想到两个选择:

  1. 如果您可以支持这一点,请将forbidden.org 存储库的本地副本放在C:/Forbidden/Subrepo或类似的地方,并在您的.hgsub 中使用此绝对路径。Mercurial能够推动这一点,它应该可以工作。

  2. 如果您不对这个 repo 进行任何修改,那么将实际的 prevent.org url 作为您的 subrepo 地址是没有问题的。如果 subrepo 没有更改,您的推送应该会成功。当然,这是一个相当手动的选项,在更大的团队中是不可能执行的。如果您确实不小心对子存储库进行了一些修改,则必须通过并使用histeditMQueues将其拉出,而子存储库可能会很棘手。

于 2011-02-24T02:36:57.700 回答