1

次の(Visual Studio)プロジェクト(簡略化)があるとします。

  • base-lib-1
  • base-lib-2
  • product-1 : base-lib-1に依存
  • product-2base-lib-1およびbase-lib-2に依存
  • product-3base-lib-1base-lib-2に依存し、 product-2のコンポーネントとして使用されます
  • product-4product-3のように

このプロジェクト構造を1つまたは複数のMercurialリポジトリに編成するための良い方法は何でしょうか。現在、Subversionを使用しており、依存ライブラリを外部として含めています。

1つの方法は、product-1以外のすべてを単一のリポジトリに配置することです。これらの製品はすべて、常に1つのパッケージとして一緒にリリースされるためです。私はこのソリューションに最も満足していると思います。そうすれば、リポジトリの処理方法についてかなり確信が持てるようになります。しかし、 base-lib-1を複製せずに、このスキームにproduct-1をどのように適合させるのでしょうか。

別の方法として、次のように編成されるサブリポジトリを使用することを考えました。

  • product-package-A
    • base-lib-1
    • product-1
  • product-package-B
    • base-lib-1
    • base-lib-2
    • product-2
    • product-3
    • product-4

このアプローチの問題は、サブリポジトリを使用したことがないため、このソリューションで発生する落とし穴についてはよくわかりません。

たとえば、サブリポジトリは、各サブリポジトリの最新リビジョンと固定リビジョンのどちらを常に使用するかを決定できるという点で、SVN外部のように動作しますか?

たとえばbase-lib-1product-2を同時に変更した場合、サブリポジトリはどのように動作しますか?それらは同じステップでMercurialによって処理されますか、それともすべてを手動でコミット/プッシュおよびプル/更新する必要がありますか?この場合、 base-lib-1のサブリポジトリはproduct-package-Aでどのように動作しますか?

複数のサブリポジトリでの変更が必要な新しい機能ブランチを開発する場合、このシナリオでブランチはどのように機能しますか?すべてのリポジトリを手動で分岐してマージする必要がありますか、それともMercurialによって処理されますか?

サブリポジトリを使用して大規模なプロジェクトを編成することについて、他に落とし穴はありますか?Mercurialで多くの依存関係を持つ大規模なプロジェクトを処理するための好ましい方法は何ですか?

4

1 に答える 1

2

あなたの質問は、ここでよく聞かれる質問のほぼ完全な複製ですが、クイック検索で適切な参照が見つからないため、ここに移動します:サブリポジトリを使用します

サブ質問を一度に1つずつ取り上げます。

たとえば、サブリポジトリは、各サブリポジトリの最新リビジョンと固定リビジョンのどちらを常に使用するかを決定できるという点で、SVN外部のように動作しますか?

サブリポジトリは特定のバージョンに固定されており、親プロジェクトはどちらを指定します。

たとえばbase-lib-1とproduct-2を同時に変更した場合、サブリポジトリはどのように動作しますか?それらは同じステップでMercurialによって処理されますか、それともすべてを手動でコミット/プッシュおよびプル/更新する必要がありますか?この場合、base-lib-1のサブリポジトリはproduct-package-Aでどのように動作しますか?

カンマhg commit?ndは--subreposオプションを使用するため、オプションで再帰的にコミットするかどうかを指定できます(のすべてui.commitsubreposを参照man hgrc)。プッシュは常にサブリポジトリの変更をプッシュします。

複数のサブリポジトリでの変更が必要な新しい機能ブランチを開発する場合、このシナリオでブランチはどのように機能しますか?すべてのリポジトリを手動で分岐してマージする必要がありますか、それともMercurialによって処理されますか?

はい、各リポジトリを手動で分岐およびマージします。

サブリポジトリを使用して大規模なプロジェクトを編成することについて、他に落とし穴はありますか?Mercurialで多くの依存関係を持つ大規模なプロジェクトを処理するための好ましい方法は何ですか?

最初にテストシナリオを実行して練習するだけです。また、人々が新しいクライアントを持っていることを確認してください。このようなものは、2.1.xまでUIに関して洗練されていませんでした

于 2012-08-06T13:55:51.690 に答える