Mercurial 到 Bitbucket - 子仓库 - 仓库无关错误

5
以下是我采取的步骤来构建repo和子repo。
所有内容都托管在Bitbucket上。
1.按照最佳实践,创建一个骨架repo来容纳所有的子repo。克隆到我的机器上。 2.将主要项目克隆为subrepo1(在mainrepo目录结构中)。 3.将主要项目添加到mainrepo作为subrepo1。 4.主repo的提交正常工作。 5.成功推送mainrepo和subrepo1到Bitbucket。 6.继续将另一个subrepo2克隆到mainrepo目录中。 7.将subrepo2添加到mainrepo作为subrepo2。 8.主repo的提交正常工作。 9.在推送mainrepo时出现“存储库不相关”的错误,之后是“搜索更改”。错误仅发生在新添加的subrepo2上。
以下是目录结构: mainrepo --subrepo1(主项目) --subrepo2(类库)
我花了无数个小时来尝试让这个工作,但我肯定错过了一些明显的东西。
是什么导致了这个错误?我漏掉了什么? 我需要能够在项目增长时添加其他子repo。

附加信息:在TortoiseHg中,我可以直接将subrepo2推送到BitBucket...但是如果我从mainrepo推送,则会出现“存储库不相关”的错误。 - faldeland
我在这个链接https://dev59.com/v2w05IYBdhLWcg3wUAM0找到了答案,并确保一切按正确顺序完成。对于我来说,我可以单独推送它,但不能作为主repo推送的一部分,这没有意义。 - faldeland
我已在BitBucket上创建了一个存储库来测试这个设置,一切都没有问题。你可以尝试克隆这个:https://bitbucket.org/SteveKaye/mainrepo - Steve Kaye
我已经克隆了它,因为你的例子让我发现我没有正确配置我的远程Bitbucket存储库的.hgsub。 - faldeland
1个回答

14
我创建示例的步骤如下:
  1. 在 BitBucket 上创建 MainRepo
  2. 在 BitBucket 上创建 SubRepo
  3. 克隆 MainRepo
  4. SubRepo 克隆为 MainRepo 的子目录
  5. 手动创建包含内容 SubRepo = ../SubRepo 的文件 .hgsub
  6. .hgsub 添加到 MainRepo,并提交和推送
  7. 在 BitBucket 上创建 SubRepo2
  8. SubRepo2 克隆为 MainRepo 的子目录
  9. 手动编辑 .hgsub 并添加 SubRepo2 = ../SubRepo2
  10. 再次提交和推送 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语法左侧定义工作副本中存储库所在文件夹,右侧定义要从哪里获取。当等号右侧是相对路径时,它定义了子存储库在中央服务器上相对于主存储库的位置。所以在上面的例子中,您需要向上一级文件夹bitbucket.org/SteveKaye,并且SubRepo位于该文件夹中。
文档说明如下:
“Mercurial存储库的源路径可以是相对路径、绝对路径或URL。通常建议使用微不足道的相对路径,其中源路径与工作目录路径相同:这将确保子存储库始终可以“就地”找到。
如果不能托管子存储库“就地”,则可以使用其他相对路径,例如因为中央存储库或托管服务的限制。使用此类非微不足道的相对路径的一个后果是无法复制克隆。”
这似乎与您在使用BitBucket时的情况有关,我预计您的克隆无法被复制,正如最后一句话所说。

3
我卡住的地方是没有完全理解 .hgsub 在做什么。这让我清楚了 “.hgsub 的语法是这样的:等号左边定义工作副本中存放仓库的文件夹,等号右边定义从哪里获取它。当等号右边是相对路径时,它定义子仓库在中央服务器上相对于主仓库的位置。因此,在上面的例子中,你需要向上跳转一个文件夹到 bitbucket.org/SteveKaye,而 SubRepo 就包含在那个文件夹中。” - faldeland
对于楼主来说可能已经太晚了,但是对于那些寻找答案的人来说,这个回答特别有用:https://dev59.com/qFfUa4cB1Zd3GeqPEhYm#5968126 - cydonian
终于有一个真正解释正在发生的事情的答案了。 - Clonkex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接