3

最近、PerforceからMercurialに移行し、気に入っています。

1つの小さな問題:多くの調査の後、リポジトリ内の特別なディレクトリをクライアント上の特別な場所にマップする方法を理解できません。これが私たちのhgリポジトリの例です:

/foo/source files
/bar/source files
/build
    /macosx/mac make files
    /win/windows make files

Perforceでは、クライアント仕様のマッピングを使用して、// depot / build / macosx/...をMacクライアントの/build/ ...にマッピングし、// depot / build / win/...を/buildにマッピングしていました。 /...Windows開発ボックス。ディレクトリfooとbarはそのまま同期されます。/fooと/barのmakefileは、ビルドmakefileが/ buildにあると想定しており、そのままにしておきたいと考えています。最終的なクライアントファイルセットは次のようになります。

/foo/source files
/bar/source files
/build/client specific make files

サブリポジトリについて読みましたが、このソリューションはクライアント固有ではないようです。

この問題を解決する方法についてのアイデアは非常に高く評価されます!

4

3 に答える 3

3

Mercurialではリポジトリの一部だけをチェックアウトすることはできません。

常にすべてを含むクローンを取得し、作業ディレクトリにもすべてが含まれます。

Mercurialを使用すると、1つのプロジェクトに対して1つのリポジトリを作成するように努めて、取得するすべてのものが論理的に一緒に属するようにする必要があります。そうすれば、その一部だけを必要とすることはあまりありません。

これは、Mercurialリポジトリにあるディレクトリ構造が、ディスクにある構造と常に正確に一致することも意味します。

于 2010-11-11T14:25:14.330 に答える
2

Mercurial では、デポとは別のクライアントという概念がないため、これを行うことはできません。

ただし、Mac OS X ではシンボリック リンク (ln -s) を、Windows ではジャンクション (Vista では mklink、XP ではジャンクション ツールを使用してアップ) を使用できますhttp://technet.microsoft.com/en-us/sysinternals/bb896768 .aspx ) を使用して、ファイル システム レベルでこの問題を解決します。

別の方法として、Makefile 内の変数を使用してビルド ディレクトリを参照することもできます (例:$(BUILD)/something.extの代わりにbuild/something.ext)。

于 2010-11-11T14:31:30.190 に答える
1

この種のマッピングは Mercurial では実行できません。サブディレクトリだけをチェックアウトできるように、「狭い」クローン用の優れた TODO 項目があります。そして、そのような機能をサポートする実装を見ることができました。しかし、繰り返しになりますが、このようなものは少し「賢い」(読み方が複雑) と見なされ、そのアイデアには多くの反発があることを私は知っています。

それまでの間、これら 2 つの解決策のいずれかをお勧めします。

  1. シンボリック リンク。buildディレクトリへのシンボリックリンクを.hgignoreファイルに入れます。次に、各ユーザーは、ビルド ファイルの適切なディレクトリへの独自のシンボリック リンクを作成できます。これには、シンボリック リンクのないプラットフォームでは動作しないという欠点があります。
  2. トップレベルのメイクファイルで使用され、呼び出す必要があるプラットフォーム固有のメイクファイルへのパスを構築する環境変数。
于 2010-11-11T14:34:22.503 に答える