Mercurial to Bitbucket - Subrepository - Repository是无关的错误

时间:2012-12-14 22:05:21

标签: mercurial bitbucket

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

一切都托管在Bitbucket上。

  1. 根据最佳实践,创建了一个框架仓库来保存所有子流程。克隆到我的机器上。
  2. 克隆主项目as subrepo1(在mainrepo目录结构中)。
  3. 将主要项目添加到mainrepo作为subrepo1。
  4. mainrepo的承诺按预期工作。
  5. 成功将mainrepo和subrepo1推向Bitbucket。
  6. 继续将另一个subrepo2克隆到mainrepo目录。
  7. 将subrepo2添加到mainrepo作为subrepo2
  8. mainrepo的承诺按预期工作。
  9. 在“搜索更改”后,推送mainrepo导致“存储库不相关”错误仅在新添加的子参数2上发生错误。
  10. 这是目录结构: mainrepo --subrepo1(主要项目) --subrepo2(类库)

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

    导致此错误的原因是什么?我错过了什么? 随着项目的增长,我需要能够添加额外的子目录。

1 个答案:

答案 0 :(得分:13)

我制作示例的步骤如下:

  1. 在BitBucket上创建MainRepo
  2. 在BitBucket上创建SubRepo
  3. 克隆MainRepo
  4. SubRepo克隆为MainRepo
  5. 的子目录
  6. 手动创建包含内容.hgsub
  7. SubRepo = ../SubRepo文件
  8. .hgsub文件添加到MainRepo,提交并按
  9. 在BitBucket上创建SubRepo2
  10. SubRepo2克隆为MainRepo
  11. 的子目录
  12. 手动修改.hgsub并添加SubRepo2 = ../SubRepo2
  13. 再次提交并推送MainRepo
  14. 从那时起,我可以编辑两个子存储库中的任何一个,并在工作台中查看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
    

    当你推送它时,看起来它正试图将SubRepo推入MainRepo,这将解释你得到的无关的存储库错误消息。

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

    文档说:

      

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

         

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

    这看起来与使用BitBucket时的情况有关,我希望你的克隆不能像上一句中所说的那样克隆。