1

私は3つのプロジェクトを持っています:

D:\Projects\ProjectA\src\packA
D:\Projects\ProjectB\src\packB
D:\Projects\ProjectC\src\packC

これら 3 つのプロジェクトの 3 つのパッケージを同じ離れたリポジトリに保存したいと考えています。

離れたリポジトリのクローンに 3 つのパッケージをクローンしようとしました。

D:\mercurial\DistantRepo\packA
D:\mercurial\DistantRepo\packB
D:\mercurial\DistantRepo\packC

次に、これら 3 つのパッケージを .hgsub ファイルでサブリポジトリとして宣言しました。

packA = D:/Project/ProjectA/src/packA
packB = D:/Project/ProjectB/src/packB
packC = D:/Project/ProjectC/src/packC

hg addandhg commitコマンドを呼び出しました。

しかし、ファイルをリモート リポジトリにプッシュしようとすると、.hgsub および .hgsubstate ファイルがリモート リポジトリにプッシュされますが、パッケージには次のことが起こります。

pushing to https://my.distant.repo
pushing subrepo packA to D:/Projects/ProjectA/src/packA
searching for changes
no changes found
pushing subrepo packB to D:/Projects/ProjectB/src/packB
searching for changes
no changes found
pushing subrepo packC to D:/Projects/ProjectC/src/packC
searching for changes
no changes found
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 2 changes to 2 files

サブリポジトリの仕組みを誤解しているようです...

サブリポジトリの使用は私のユースケースに当てはまりますか? 私がやりたいことはどのように行われるのでしょうか?

4

1 に答える 1

0

変更が見つかりませんでした

pushing subrepo packA to D:/Projects/ProjectA/src/packA
searching for changes
no changes found

これは、まだ にない変更セットがないことを意味しpackAますD:/Projects/ProjectA/src/packA。これならOK

  • 本当に新しいものはありませんpackA
  • あなたはすでににプッシュpackAしましたD:/Projects/ProjectA/src/packA

疑わしい場合は、ディレクトリhg outguing D:/Projects/ProjectA/src/packA内で発行して確認してください。packAこのコマンドは何も出力しません (=何も送信しません)。

パス

D:/Projects/Project[ABC]/src/pack[ABC].hgsub ファイルでこれらの絶対 URL を mercurialに指定したため、これらのサブリポジトリにプッシュされます。.hgsub を次のように変更した方がよい場合があります。

packA = packA
packB = packB
packC = packC

# You can also insert something like packA = ProjectA/src/packA, the point
# is to declare all subrepos as subdirectories of the main repo

サーバーを変更して、それが機能するようにします

  • / の元の製品
  • /packA の ProjectA/src/packA
  • /packB の ProjectB/src/packB
  • /packC の ProjectC/src/packC

このリポジトリのローカル ミラー クローンは簡単に作成できますが、ローカル ミラーでは相対 URL と絶対 URL で問題が発生するため、これは推奨されるパターンです (可能ですが、面倒です)。

補足として、依存関係を追跡する外部リポジトリ (hg wiki では「シン シェル リポジトリ」と呼ばれます) の使用を検討することもできます。これは、pack* リポジトリと製品リポジトリをサブリポジトリとして埋め込みます。各ソフトウェアが属する場所。

編集

Mercurial では、製品ごとに 1 つのリポジトリしか持つことができず、サーバー上ではリポジトリごとに URL を使用できます。これは、メインの製品とサブリポジトリに異なるリモート リポジトリを設定する必要があることを意味します。これは、異なるサブリポジトリのコンテンツを製品リポジトリと一緒に保存することができないためです。

これらの異なるリポジトリを 1 つにする可能性はありますが、hg pull -fこの方法はお勧めしません。このようなプルの後、このリポジトリの履歴をナビゲートすることは非常に困難です。これは、さまざまなソースの履歴が混在しているためです (たとえば、このリポジトリのヒント リビジョンは、誰かがプッシュするたびに異なるソース間でスワップされます)。この方法は、異なるサブリポジトリが共通の履歴を共有している場合にのみ使用してください。

于 2011-09-08T14:35:44.610 に答える