我制作示例的步骤如下:
MainRepo
在 BitBucket 上创建
SubRepo
在 BitBucket 上创建
- 克隆
MainRepo
- 克隆
SubRepo
为子目录MainRepo
- 手动创建
.hgsub
包含内容的文件SubRepo = ../SubRepo
- 将
.hgsub
文件添加到MainRepo
、提交和推送
SubRepo2
在 BitBucket 上创建
- 克隆
SubRepo2
为子目录MainRepo
- 手动编辑
.hgsub
和添加SubRepo2 = ../SubRepo2
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
当您推送它时,它看起来像是在尝试推送SubRepo
,MainRepo
这将解释您收到的不相关的存储库错误消息。
语法是这样的.hgsub
,equals 的左边定义了工作副本中存储库所在的文件夹,equals 的右边定义了从哪里获取它。当等号的右边是相对路径时,它定义了子存储库相对于主存储库在中央服务器上的位置。因此,在上面的示例中,您上一个文件夹,bitbucket.org/SteveKaye
并且SubRepo
包含在该文件夹中。
文档说:
Mercurial 存储库的源路径可以是相对或绝对路径或 URL。通常建议使用源路径与工作目录路径相同的普通相对路径:这将确保始终可以“就地”找到子存储库。
如果无法“就地”托管子存储库,例如由于中央存储库或托管服务的限制,则可以使用其他相对路径。使用这种非平凡的相对路径的结果是无法克隆克隆。
这看起来与您在使用 BitBucket 时的情况有关,我希望您的克隆无法像最后一句中所说的那样被克隆。