5

リポジトリとサブリポジトリを構築するために私が行った手順は次のとおりです。

すべてがBitbucketでホストされています。

  1. ベストプラクティスに従って、すべてのサブリポジトリを保持するスケルトンリポジトリを作成しました。私のマシンにクローンされました。
  2. プライマリプロジェクトをsubrepo1(mainrepoディレクトリ構造内)として複製しました。
  3. プライマリプロジェクトをsubrepo1としてmainrepoに追加しました。
  4. mainrepoのコミットメントは期待どおりに機能します。
  5. mainrepoとsubrepo1をBitbucketに正常にプッシュしました。
  6. 別のsubrepo2をmainrepoディレクトリに複製します。
  7. subrepo2をsubrepo2としてmainrepoに追加しました
  8. mainrepoのコミットメントは期待どおりに機能します。
  9. mainrepoをプッシュすると、「変更を検索中」の後に「リポジトリは無関係です」というエラーが発生します。エラーは、新しく追加されたsubrepo2でのみ発生します。

ディレクトリ構造は次のとおりです。mainrepo--subrepo1(メインプロジェクト)-subrepo2(クラスライブラリ)

私はこれを機能させるために数え切れないほどの時間を費やしました、そして私は明白な何かを逃しているに違いありません。

このエラーの原因と私が見逃しているものは何ですか?プロジェクトの成長に合わせて、サブリポジトリを追加できるようにする必要があります。

4

1 に答える 1

14

例を作成するために行った手順は次のとおりです。

  1. MainRepoBitBucketで作成
  2. SubRepoBitBucketで作成
  3. クローンMainRepo
  4. SubRepoのサブディレクトリとしてクローンを作成するMainRepo
  5. .hgsub内容を含むファイルを手動で作成しますSubRepo = ../SubRepo
  6. .hgsubファイルをに追加しMainRepo、コミットしてプッシュします
  7. SubRepo2BitBucketで作成
  8. SubRepo2のサブディレクトリとしてクローンを作成するMainRepo
  9. 手動で編集.hgsubして追加SubRepo2 = ../SubRepo2
  10. コミットしてMainRepoもう一度プッシュ

それ以降、2つのサブリポジトリのいずれかを編集して、ワークベンチで見るとそれらが変更されていることを確認できましMainRepoた。次に、サブリポジトリへの変更をコミットし、サブリポジトリの状態をコミットして、MainRepo3つのリポジトリすべてを1回のプッシュでプッシュできます。MainRepo

他の質問()でTortoiseHgによって設定されたとあなたが言った方法はsubrepo = subrepo、BitBucketの構造がどのようであるかにより、動作しません。私はあなたがこのようにトップレベルでのみリポジトリを持つことができると思います:

bitbucket.org/SteveKaye/MainRepo
bitbucket.org/SteveKaye/SubRepo

一方、ラインを持つことは、subrepo = subrepo次のような構造を設定しようとしています。

bitbucket.org/SteveKaye/MainRepo
bitbucket.org/SteveKaye/MainRepo/SubRepo

これをプッシュすると、プッシュしようとしているように見えます。これにより、表示されている無関係のリポジトリエラーメッセージが説明されますSubRepoMainRepo

構文は、equalsの.hgsub左側がリポジトリーのある作業コピー内のフォルダーを定義し、equalsの右側がそれを取得する場所を定義するようなものです。等号の権利が相対パスである場合、サブリポジトリがメインリポジトリに対して中央サーバー上のどこにあるかを定義します。したがって、上記の例では、1つのフォルダーに移動するbitbucket.org/SteveKayeと、SubRepoはそのフォルダーに含まれます。

ドキュメントには次のように書かれています。

Mercurialリポジトリのソースパスは、相対パスまたは絶対パスまたはURLのいずれかです。一般に、ソースパスが作業ディレクトリパスと同じであるトリビアル相対パスを使用することをお勧めします。これにより、サブリポジトリが常に「所定の場所」にあることが保証されます。

中央リポジトリまたはホスティングサービスの制限などのために、サブリポジトリを「インプレースで」ホストできない場合は、他の相対パスを使用できます。このような重要な相対パスを使用した結果、クローンを複製できなくなります。

これは、BitBucketを使用しているときの状況に関連しているように見えます。最後の文で述べているように、クローンを複製することはできないと思います。

于 2012-12-19T08:19:50.617 に答える