3

svn:external リンクを含むディレクトリがある場合 (これは仕事で広く使用されています)、ブランチ間でそのディレクトリをマージするたびに、ディレクトリ内のすべてのファイルが新しい svn:merge-info プロパティを取得します。

外部リンクがマージによって変更されていないため、svn がそれを独自のサブツリーとしてカウントしているためだと推測しています (関連しますが、同じ問題ではありません:mergeinfo プロパティ)。

これにより、実際の変更がすべてのマージ情報プロパティの変更に埋もれてしまい、変更セットが大きくなり、ほとんど判読できなくなります。(1 行の変更をマージすると 500Kb の差分が発生する可能性がある、十分なマージ履歴と外部を備えたブランチがあります)。

これまでのところ、コミットする前に svn:external リンクを含むサブツリーからマージ プロパティを削除することしかできません。これにより、 --reintegrate の使用が妨げられ、実際のサブツリーのマージが発生した場合に追跡できなくなります。

誰にもより良い解決策がありますか?

4

1 に答える 1

3

svn:merge-info は読むことを意図していませんが、あなたの問題は理解しています。

1 つの解決策は、1.7 (サーバーとクライアントの両方) にアップグレードすることです。1.7 では、merge-info に役立つ作業がいくつかあります。

すでにマージ情報を理解しているようですが、とにかく追加情報があります。

ノード (ファイルまたはディレクトリ) のマージ情報は、その親 (ディレクター) から作業コピーを介して、さらにリポジトリまで継承されます。svn は、マージ情報が必要なノード、つまり親とは異なるノードにのみマージ情報を書き込もうとします。

ノードのマージ情報を防ぐには、リポジトリ ルートのできるだけ近くでマージするようにしてください。他のマージが発生した場合は、上位ディレクトリからそれらのホールでマージを試みる前に行ってください。これにより変更は発生しませんが、マージ情報のギャップが埋められ、Mergeinfo Elisionがより効果的になります。

svn のバージョンによっては、マージ時に意図したとおりに動作しないことがわかりました。1.6.6 (ubuntu 10.04 が持っているもの) は、部分的なマージを行うときにうまく機能しません。

于 2011-11-18T22:57:47.557 に答える