5

SVN から次のエラー メッセージが表示されます。

svn: すでに存在するツリー競合を追加しようとしています

現在、これはこのサイトで既に質問されており、与えられた説明は、以前のマージ後にツリーの競合が解決されておらず、SVN が同じツリーの競合を再度追加しようとしているというものです。

そこで、「svn status」を呼び出し、すべてのツリー競合を解決済みとしてマークしました。次に *svn revert -R ** を実行し、「svn status」の出力が完全に空であることを再確認しました。次に、まったく同じ場所でまったく同じエラーメッセージを表示して、もう一度マージを試みました。

svn が同じマージ操作中にまったく同じ場所に 2 回ツリー競合を追加しようとするように思えますが、これは SVN の深刻なバグです。

4

3 に答える 3

2

これのソースは、SVN の好みに合わない方法で名前を変更したフォルダーだったようです。svn move コマンドを使用する代わりに、ローカルでフォルダーの名前を変更し、svn remove で古いフォルダー名を削除し、svn add で新しいフォルダー名を追加しました。ただし、これにより、古い名前の「ファントムフォルダー」が生成されます。これは、作業コピーにもリポジトリにも存在しませんが、SVN は存在すると見なします。ファントム フォルダは、前述の致命的なツリーの競合を引き起こします。

これを解決した方法は次のとおりです。

  1. トランクをブランチにマージします。ブランチは、最終的にトランクにしたいものになりました。

  2. トランクのクローンとして新しいブランチを作成します。

  3. 作業ディレクトリを最新のブランチ (つまり、最終的にトランクにしたいもの) に切り替えます。そこで使いsvn diff > update.patchます。

  4. 新しく作成したクローン ブランチのフォルダーに update.patch をコピーします。

  5. 作業ディレクトリをクローン ブランチのディレクトリに切り替えて、パッチを適用します。clone ブランチは up-to-date-branch とほぼ同じですが、1 つの違いがあります: これらの非表示の svn ファイルにファントム フォルダーについて言及されていません。

  6. クローン ブランチをトランクにマージします。

于 2010-02-25T12:01:35.320 に答える
0

問題の背景

明示的に「コミット」しなければ、サーバー上のリポジトリには影響しないと考えて、作業コピーに変更を加えました。

そして、いくつかの警告(覚えていない)をかわすために、「更新」を数回使用しました。私自身が掘ったこの穴から抜け出す方法を見つけた後、「更新」コマンドが次のように機能することを理解しました。

  1. 作業コピーが変更/最新の場合、リポジトリにコミットされます。
  2. レポが最新の場合、「チェックアウト」のように機能します(私が理解できる限り)。

2 つのブランチ ( devalpha ) を使用しています。そして、 devブランチをalphaにマージしたかったのです。

修正に使用する手順

  1. 意図的にコミットしたリビジョンにアルファ更新し、
  2. devalphaにマージしました。

注: SmartSVN を使用していました。

于 2016-04-29T13:32:53.423 に答える