Mercurial subrepo和相对路径

时间:2011-02-23 23:27:38

标签: mercurial relative-path mercurial-subrepos

我有一个项目,我有一个bitbucket存储库,它依赖于我作为subrepo合并的另一个项目。现在,我没有对子存储库的推送访问权限,也没有我想要或不需要的权限 - 这是一种只有拉动的关系。

我意识到当你推送主存储库时,它也会尝试推送子存储库。由于我无法做到这一点,因此我提取了依赖项目的本地副本,与主存储库目录处于同一级别。从本质上讲,我有以下布局:

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/

.hgsub的内容类似于

Lib/SubRepo = ../SubRepo

然后我克隆了,

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

到目前为止,这么好。问题是,在我全部设置并提交更改后,当我尝试推送Main Mercurial时会尝试将SubRepo推送到https://mine.org/SubRepo,这不存在,从而使整个推送操作失败。

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:4)

为什么不创建https://mine.org/SubRepo - 如果您不想宣传它,您可以随时在其hide部分[web]中为其启用.hg/hgrc文件。这是我习惯的模式,你可以在这里使用它们克隆主仓库和同一布局中的所有子目录:开发框和面向web的hgweb安装。

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

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

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

答案 1 :(得分:1)

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

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

  2. 如果您不对此回购进行任何修改,那么包含实际的forbidden.org网址作为您的subrepo地址是没有问题的。如果subrepo没有变化,你的推动应该会成功。当然,这是一个相当手动的选择,在更大的团队中,它是不可能实施的。如果你不小心对subrepo进行了一些修改,你必须经过并使用histeditMQueues将其拉出来,这对于subrepos来说可能很棘手。