Bitbucket 不会在原地进行子存储库。因此,Mercurial 试图将您的每个存储库推送到同一位置,并在您尝试将存储库 SubFolder2 推送到 SubFolder1 存储库的远程副本时抱怨。
子存储库表面上是在多个项目之间共享的库,因此不存在于任何一个主存储库下,而是存在于它们自己的空间中。因此,您必须创建单独的远程存储库来容纳每个子存储库(库)并在 .hgsub 文件中引用该单独的远程路径。
例如,您的示例项目可能有三个 bitbucket 托管的存储库
https://bitbucket.org/bitbucketname/main_project
https://bitbucket.org/bitbucketname/library1
https://bitbucket.org/bitbucketname/library2
您希望本地克隆的文件空间如下所示:
/MainFolder/
/MainFolder/SubFolder1
/MainFolder/SubFolder2
在 main_project (MainFolder) 的本地克隆中,将父存储库的默认路径设置为https://bitbucket.org/bitbucketname/main_project
即,/MainFolder/.hg/hgrc
包含
[paths]
default = https://bitbucket.org/bitbucketname/main_project
现在,在 .hgsub 文件中指明子存储库/库的远程路径。.hgsub 条目的一般格式为:
local/path/to/subrepo = remote/path/to/matching/library
因此,您的 .hgsub 可能包含相对的本地和远程路径(相对于本地或远程主仓库的位置,视情况而定):
SubFolder1 = ../library1
SubFolder2 = ../library2
或具有到每个库的远程仓库的绝对路径的相对本地路径:
SubFolder1 = https://bitbucket.org/bitbucketname/library1
SubFolder2 = https://bitbucket.org/bitbucketname/library2
或一切的绝对路径:
/MainFolder/SubFolder1 = https://bitbucket.org/bitbucketname/library1
/MainFolder/SubFolder2 = https://bitbucket.org/bitbucketname/library2
现在,当您从本地主项目推送时,Mercurial 确切地知道在哪里可以找到所有子存储库(本地)以及在哪里推送对每个库所做的更改(远程)。
此外,假设您想将其他人的库添加到您的项目中。然后你的 .hgsub 可能看起来像这样:
SubFolder1 = ../library1
SubFolder2 = ../library2
another_library = https://bitbucket.org/honkaboy/honkaboys_excellent_library