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

fal*_*and 5 mercurial bitbucket

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

一切都托管在Bitbucket上.

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

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

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

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

Ste*_*aye 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
Run Code Online (Sandbox Code Playgroud)

而有线subrepo = subrepo正试图建立这样的结构:

bitbucket.org/SteveKaye/MainRepo
bitbucket.org/SteveKaye/MainRepo/SubRepo
Run Code Online (Sandbox Code Playgroud)

当你把这样它看起来像它试图推SubRepoMainRepo这可以解释你所得到的资源库无关的错误消息.

.hgsub语法是这样的等号的左边定义了工作副本的文件夹中,仓库将和平等的权利定义从哪里得到它.当equals的权限是相对路径时,它定义子存储库在中央服务器上相对于主存储库的位置.所以在上面的例子中,你去了一个文件夹,bitbucket.org/SteveKayeSubRepo包含该文件夹中.

文件说:

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

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

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

  • 对我来说,问题的关键是并没有完全理解.hgsub正在做什么.这清除了所有内容".hgsub语法使得equals的左边定义了工作副本中存储库所在的文件夹,而equals的右边定义了从哪里获取它.当等于的权利时是一个相对路径,它定义了子存储库在中央服务器上相对于主存储库的位置.所以在上面的例子中,你将一个文件夹上传到bitbucket.org/SteveKaye,SubRepo包含在该文件夹中." (3认同)