Bitbucket はその場でサブリポジトリを実行しません。その結果、Mercurial はすべてのリポジトリを同じ場所にプッシュしようとしており、リポジトリ SubFolder2 を SubFolder1 リポジトリのリモート コピーにプッシュしようとするとエラーが発生します。
サブリポジトリは、表向きは複数のプロジェクト間で共有されるライブラリであるため、1 つのメイン リポジトリの下ではなく、独自のスペースに存在します。したがって、個別のリモート リポジトリを作成して、各サブリポジトリ (ライブラリ) を格納し、.hgsub ファイルでその個別のリモート パスを参照する必要があります。
たとえば、サンプル プロジェクトには、bitbucket でホストされる 3 つのリポジトリを含めることができます。
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