【问题标题】:Mercurial subrepo and relative pathMercurial subrepo 和相对路径
【发布时间】:2011-02-23 23:27:38
【问题描述】:

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

我意识到,当您推送主存储库时,它也会尝试推送子存储库。因为我不能这样做,所以我提取了一个依赖项目的本地副本,与主存储库的目录处于同一级别。本质上,我有以下布局:

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,从而导致整个推送操作失败。

我有什么遗漏吗?

【问题讨论】:

    标签: mercurial relative-path mercurial-subrepos


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。我想我会继续这样做,尽管我希望 Mercurial 能让我配置它以按照我最初期望的方式处理相对路径。
    • 是的,当考虑到 Mercurial 对 git subrepos 和 svn subrepos 的支持时,这是一个非常困难的问题。我只是想你可以在你的网络服务器上设置一个“重定向”,比如Redirect /SubRepo https://forbidden.org/SubRepo,这可能是最省力的解决方法。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2013-07-14
      • 2010-12-17
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      相关资源
      最近更新 更多