5

TortoiseHg で次のようなサブリポジトリ構造を持っています。

/MainFolder/
/MainFolder/SubFolder1
/MainFolder/SubFolder2

MainFolder は bitbucket のプライベート リポジトリです SubFolder1 は bitbucket のプライベート リポジトリです SubFolder2 は bitbucket のプライベート リポジトリです

MainFolder 内のファイル .hgsub は次のようになります。

SubFolder1 = SubFolder1
SubFolder2 = SubFolder2

MainFolder 内のファイル .hgsubstat にも有効な GUID とサブリポジトリ名があります。

問題は、MainFolder の bitbucket にプッシュしようとするたびに、最初に MainFolder、次に SubFolder1 をプッシュしますが、SubFolder2 に到達すると、TortoiseHg は「中止: リポジトリは無関係です」というエラーをスローします。

Bitbucket で MainFolder リポジトリを確認すると、実際には SubFolder1 のコンテンツが含まれています (サブリポジトリとしてリストされているはずです)。

MainFolder が親リポジトリとして正しくアップロードされ、SubFolder1 と SubFolder2 が bitbucket のサブリポジトリとしてリストされるように、これを修正するにはどうすればよいですか?

4

2 に答える 2

6

bitbucketのドキュメントに示されているでは、すべてのリポジトリの名前がMainRepository-SubRepository になるように、リポジトリの名前を変更する必要があります。すべてのリポジトリの名前を変更したくなかったので、次の例に示すように正規表現を変更したところ、正しく機能するようになりました。このバージョンでは、リポジトリ名にダッシュ区切りは必要ありません。メイン リポジトリとサブ リポジトリは個別に名前を付けることができます。.hgsub の例は次のようになります。

SubFolder1 = SubFolder1
SubFolder2 = SubFolder2
[subpaths]
(https://(?:[^@]+@)?bitbucket\.org/[^/]+)(/[^/]+)/(.*) = \1/\3
于 2012-12-08T23:21:29.477 に答える
2

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
于 2015-07-12T03:24:46.237 に答える