5

以下是我为构建 repo 和 subrepos 所采取的步骤。

一切都托管在 Bitbucket 上。

  1. 根据最佳实践,创建了一个骨架存储库来保存所有子存储库。克隆到我的机器上。
  2. 将主项目克隆为 subrepo1(在 mainrepo 目录结构中)。
  3. 将主要项目添加到 mainrepo 作为 subrepo1。
  4. mainrepo 的提交按预期工作。
  5. 成功推送 mainrepo 和 subrepo1 到 Bitbucket。
  6. 继续将另一个 subrepo2 克隆到 mainrepo 目录。
  7. 将 subrepo2 作为 subrepo2 添加到 mainrepo
  8. mainrepo 的提交按预期工作。
  9. 在“搜索更改”之后推送 mainrepo 会导致“Repository is unrrelated”错误 错误仅发生在新添加的 subrepo2 上。

这是目录结构: mainrepo --subrepo1(主项目)--subrepo2(类库)

我花了无数个小时试图让这个工作,我一定错过了一些明显的东西。

是什么导致了这个错误,我错过了什么?随着项目的发展,我需要能够添加额外的子存储库。

4

1 回答 1

14

我制作示例的步骤如下:

  1. MainRepo在 BitBucket 上创建
  2. SubRepo在 BitBucket 上创建
  3. 克隆MainRepo
  4. 克隆SubRepo为子目录MainRepo
  5. 手动创建.hgsub包含内容的文件SubRepo = ../SubRepo
  6. .hgsub文件添加到MainRepo、提交和推送
  7. SubRepo2在 BitBucket 上创建
  8. 克隆SubRepo2为子目录MainRepo
  9. 手动编辑.hgsub和添加SubRepo2 = ../SubRepo2
  10. MainRepo再次提交并推送

从那时起,我可以编辑两个子存储库中的任何一个,并在工作台中查看它们时发现它们发生了变化MainRepo。然后我可以将更改提交到子存储库,提交子存储库状态MainRepo并通过一次推送来推送所有三个存储库MainRepo

您在其他问题 ( ) 中所说的由 TortoiseHg 设置的方式subrepo = subrepo不适用于 BitBucket,因为它们的结构如何。我认为您只能在顶层拥有这样的存储库:

bitbucket.org/SteveKaye/MainRepo
bitbucket.org/SteveKaye/SubRepo

而让这条线subrepo = subrepo试图建立一个这样的结构:

bitbucket.org/SteveKaye/MainRepo
bitbucket.org/SteveKaye/MainRepo/SubRepo

当您推送它时,它看起来像是在尝试推送SubRepoMainRepo这将解释您收到的不相关的存储库错误消息。

语法是这样的.hgsub,equals 的左边定义了工作副本中存储库所在的文件夹,equals 的右边定义了从哪里获取它。当等号的右边是相对路径时,它定义了子存储库相对于主存储库在中央服务器上的位置。因此,在上面的示例中,您上一个文件夹,bitbucket.org/SteveKaye并且SubRepo包含在该文件夹中。

文档说:

Mercurial 存储库的源路径可以是相对或绝对路径或 URL。通常建议使用源路径与工作目录路径相同的普通相对路径:这将确保始终可以“就地”找到子存储库。

如果无法“就地”托管子存储库,例如由于中央存储库或托管服务的限制,则可以使用其他相对路径。使用这种非平凡的相对路径的结果是无法克隆克隆。

这看起来与您在使用 BitBucket 时的情况有关,我希望您的克隆无法像最后一句中所说的那样被克隆。

于 2012-12-19T08:19:50.617 回答