0

私が働いているJavaのプロジェクトがあります。

Mercurial でプロジェクトを作成するには、すべてのクラスのリポジトリを作成する必要があることを知っています。

クラスがたくさんあるので、リポジトリのコピーと私がしなければならない変更で作られたjarのコピーを持つことができると思います。

したがって、Mercurial 用語では次のようになります。

  1. すべてのクラスを含むメイン リポジトリ
  2. 変更と新しいクラスを含む小さなレポ

BリポジトリからAリポジトリにマージしたい。そして、B リポジトリに存在するクラス (*.java) のみをプルして更新したいと考えています。

私はこれを試してみましたが失敗しました:

  1. B リポジトリを作成するには、A リポジトリのクローンを作成し、すべてのファイルを削除します。
  2. .java を変更する必要があるときは wget、ローカル マシンの Mercurial サーバーで特定のファイルを編集します。ファイルが新しい場合は、hg add を実行するだけです。
  3. hg commit -I file1 -i file2 ... -i fileNBリポジトリの作業フォルダに存在するすべてのファイルに対して行うコミットを行うには。

次に、失敗した部分:

  1. 既存のファイルだけを hg 更新することはできません。
  2. B レポが A レポにマージされると、すべて問題ありません。-I しかし、パラメータでマージされた状態の hg commit を実行できません。そのすべてか無か。
  3. リポジトリからプルして更新しようとすると、同じ問題が発生します 4.

hg pull -fクローンではなく、B リポジトリの無関係なリポジトリから開始することを認識しています。しかし、アップデートの同じ問題があります。そして、それはかなり醜く見えます。

移植プラグインが役立つと思います。これも読みました Mercurialで2つのプロジェクトを結合する方法? .

この履歴が B レポで生成されたとしても、A レポでファイルの履歴を保存することは必須です。

これを達成するための最良の方法を知っていますか?

ありがとう

4

1 に答える 1

4

あなたが探しているのは部分クローンと呼ばれるもので、mercurial ではサポートされていません。

正直なところ、あなたのワークフローはかなり壊れているように思えます。サブセット リポジトリを作成し、それを同期させようとすることは、ツールの意図された使用方法との戦いです。フルレポから必要なjarをビルドするだけでなく、特定のクラスのみをant(希望)<jar>タグに含めるのはなぜですか。何千ものクラスを含むリポジトリがあり、build allそれぞれがクラスの宇宙全体のサブセットである多くの異なる jar を出力します。

とはいえ、現在のワークフローに固執する必要がある場合は、変更する必要があります。完全なリポジトリを複製してから不要なファイルを削除しないでください。完全な履歴が含まれているためです。

代わりに、hg convert(変換拡張機能filemap) を使用して、オプションとオプションを使用してサブセット リポジトリを構築し--filemapます。のソース リポジトリ タイプhgと宛先タイプの両方hgを使用すると、ファイルマップを使用して必要なファイルのみを含めることができます。クローンではなく、元のすべての変更セットを含む完全に新しいリポジトリになりますが、指定したファイルのみが含まれます。convert の組み込みインクリメンタル モードを使用すると、完全なリポジトリからの新しい変更のみを一種の更新として変換できます。

于 2009-02-02T03:46:27.627 に答える