Mercurial subrepo和相对路径

San*_*nta 5 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/
Run Code Online (Sandbox Code Playgroud)

内容.hgsub是这样的,

Lib/SubRepo = ../SubRepo
Run Code Online (Sandbox Code Playgroud)

然后我克隆了,

~/path/to/Main $ hg clone ../SubRepo/ Lib/SubRepo
Run Code Online (Sandbox Code Playgroud)

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

有什么我想念的吗?

Ry4*_*ase 4

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

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

[subpaths]
https://mine.org/SubRepo = https://forbidden.org/SubRepo
Run Code Online (Sandbox Code Playgroud)

这应该让您拦截推送的派生目标并将其指向不允许您推送的位置,让您看到没有任何更改,以便推送可以继续。