5

かなり標準的なソースツリーアプローチと水銀サブリポジトリを使用しているマスタープロジェクトがあります。

Master
\lib - compiled binaries - things like log4net, AutoFac, etc
\source - VS solution, one folder per project, etc
\tools - stuff used during the build process

\source\contrib - contains any subrepos like so:

\source\contrib\Sub1
\source\contrib\Sub2

Master\.hgsub contains something like
source\contrib\Sub1 = https://myserver.com/Sub1

さて、最近、Sub2にはSub1からのコードが必要であると判断されたため、この新しい依存関係構造を調整する必要があります。

もちろん問題は、上記と同じアプローチに従い、Sub1をSub2のサブリポジトリとして追加すると、この醜い状況になってしまうことです。

\source\contrib\Sub2\source\contrib\Sub1

マスターには、Sub1の2つの独立したコピーがあります。

したがって、サブリポジトリ(=のRHS)を参照するときに相対パスを使用する必要があることはわかっていますが、理解しているので、ここでのシナリオには役立ちません。LHSをマスターリポジトリのでライブにする方法はないと思います。これが私がここで本当に必要としていることだと思います。

私はこれを修正する方法についていくつかのアイデアを持っていますが、どれも私にぴったりではなく、より良い方法が必要だと思います。私の理想的なソリューションでは、複数のコピーを持っているというペナルティを支払うことなく、複数のプロジェクト間で同じサブリポジトリを共有できます。これは、ここでの私のシナリオでは無駄で非効率に思えます(さらに、Sub1に依存するすべてのプロジェクトで、個別にリビジョンを作成するのではなく、同じhgリビジョンを使用するようにしたい)

  1. マスターのサブリポジトリとしてSub1を削除し、マスターソリューションの相対パスを変更して、二重にネストされたSub1を参照します。このパス構造は恐ろしいだけでなく、Sub1に依存するマスターにSub3を追加した場合でも、Sub1のコピーが2つあります。

  2. Sub1のコピーをコンパイルし、\libディレクトリにチャックするだけです。Sub1はまだいくつかのチャーンが発生しているので、ソースバージョンに対してビルドしたいと思います。新しいバイナリを常にソースツリーにコピーする(そしてツリーを肥大化させる)という税金を払いたくありません。

  3. どういうわけかSub2のSub1への依存を破ります。リポジトリのアーキテクチャに基づいて、これはおそらく起こらないでしょう。Sub1には、非常に汎用的な共有ライブラリコードが含まれています。Sub2には、2つの非常に別個のプロジェクト(クライアントSDKとサーバー実装)で必要なWCFサービスコントラクト/インターフェイス/タイプが含まれています。この時点で、これらのリポジトリを分離しておくことは理にかなっています。

多分私はこれが間違っていると思っています...あるいは多分私はいくつかのhgトリックに気づいていません。

どんな助けでも大歓迎です。

4

2 に答える 2

2

バイナリをチェックインすることを忘れてください。リポジトリが肥大化するだけです。IMO、ビルドからの出力はソースリポジトリに保存しないでください。

../Sub1でSub1を見つけることを期待するようにSub2に教えてはどうですか?次に、Sub1とは別にSub2で作業する必要がある場合は、「Sub2_standalone」リポジトリを作成します。これにより、Sub1とSub2がサブリポジトリとしてプルされます。

したがって、すべてに取り組むと、次のようになります。

Master/
Master/source/contrib/Sub1  
Master/source/contrib/Sub2

しかし、Sub2で作業している場合:

Sub2_standalone/
Sub2_standalone/Sub2
Sub2_standalone/Sub1
于 2011-01-24T21:36:58.870 に答える
0

そのネストされた構造が必要な場合は、Sub2の下にあるSub1のシンボリックリンクを使用して、Sub1の両方のバージョンが常に同じリビジョンになるようにすることができます。次に、実際にはSub1のバージョンが1つしかないので、これが必要なようです。

GNU / Linuxでは、それは非常に単純ですln -s source/contrib/Sub1 source/contrib/Sub2/source/contrib/Sub1

于 2011-01-25T05:45:27.583 に答える