96

ファイルが両方のブランチに追加されている (そしてそれらの別々のブランチで作業している) いくつかのブランチを (SVN 1.6.1 を使用して) マージすると、新しいツリーの競合の 1 つが発生します。

      C foo.txt
  >   local obstruction, incoming add upon merge

両方のブランチからの変更が必要ですが、ツリーの競合により、通常の .working、.merge-left & .merge-right ファイルが得られません。これは、競合の性質上理解できます。これらの競合のかなりの数があり、各ブランチで同じファイルの削除が発生したものがありますが、それらは簡単に解決できます。

この問題を解決するにはどうすればよいですか? SVN redbean book (for 1.6) は、この状況をカバーしていません。

4

4 に答える 4

167

その解決策を提案する投稿を見つけました。実行しようとしています:

svn resolve --accept working <YourPath>

これにより、ローカル バージョンのファイルが OK であると主張されます。
単一のファイルまたはプロジェクト カタログ全体に対して実行できます。

于 2010-02-05T12:26:30.623 に答える
40

「Tree Conflict」設計ドキュメントの古いバージョン (2009 年) で言及されているように:

アド オーバー バージョン管理されたファイルのマージによる XFAIL 競合

このテストは、既存のバージョン管理されたファイルに履歴のないファイルの追加をもたらすマージを行います。
これは、' ' 種類のファイルでのツリー競合である必要がありますlocal obstruction, incoming add upon merge。r35341 の期待値を修正しました。

(ちなみに、これは ClearCase では「悪の双子」とも呼ばれます):
ファイルは 2 つの異なるブランチで 2 回作成され (ここでは 2 回「追加」されます)、2 つの異なる要素に対して 2 つの異なる履歴が作成されますが、同じ名前が付けられます。

理論上の解決策は、これらのファイルを (外部差分ツールを使用して) 宛先ブランチ ' B2' に手動でマージすることです。

まだソース ブランチで作業している場合、理想的なシナリオは、ソース ブランチからそのファイルを削除し、からにB1マージして、そのファイルを表示できるようにすることです(その後、同じ要素で作業します)。マージが からまで しか発生しないためにマージ バックが不可能な場合は、マージごとに手動でマージする必要があります。B2B1B1
B1B2B1->B2

于 2009-04-20T11:29:56.423 に答える
9

受信した変更が必要な変更である場合はどうなりますか? svn resolve --accept theirs-full を実行できません

svn resolve --accept ベース

于 2011-02-16T09:11:14.463 に答える
3

上記のuser619330のアドバイスに従おうとして、かなり徹底的に自分自身をくさびにすることができました。状況は次のとおりです。(1): 最初のブランチである branch1 で作業中にいくつかのファイルを追加しました。(2) さらなる開発のために新しいブランチ、branch2 を作成し、トランクから分岐し、branch1 からの変更をマージしました (3) 同僚が私の mod を branch1 から彼自身のブランチにコピーし、さらに mod を追加しました。その後、トランクにマージされます。(4) トランクからの最新の変更を、現在の作業ブランチである branch2 にマージしたいと考えました。これはsvn 1.6.17です。

マージには新しいファイルとのツリーの競合があり、それらが異なるトランクから新しいバージョンが必要だったので、ブランチ 2 のクリーンなコピーから、競合するファイルの svn 削除を行い、これらのブランチ 2 の変更をコミットしました (したがって、一時的な問題のファイルを含まないバージョンの branch2)、トランクからのマージを行いました。これを行ったのは、履歴をトランクのバージョンと一致させて、後でトランクにマージしようとしたときに問題が発生しないようにするためです。マージはうまくいき、ファイルのトランクバージョンを取得し、svn st はすべて問題なく表示され、変更をコミットしようとしているときに、以前に行った削除とマージからの追加の間で、さらにツリーの競合が発生しました。私の作業コピー(ファイルのトランクバージョンが含まれている)を支持して競合をsvn解決し、それをコミットしました。

うーん、ダメ。branch2 の別のコピーを更新すると、古いバージョンのファイルが生成されます (トランク マージ前)。これで、同じバージョンに更新されたと思われる branch2 の 2 つの異なる作業コピーがあり、2 つの異なるバージョンのファイルがあり、両方とも完全に最新であると主張しています。branch2 のクリーン コピーをチェックアウトすると、ファイルの古い (pre-trunk) バージョンが生成されました。これらを手動でトランク バージョンに更新して変更をコミットし、最初の作業コピー (最初にトランクの変更を送信した元) に戻り、更新を試みたところ、問題のファイルでチェックサム エラーが発生しました。問題のディレクトリを吹き飛ばし、更新を介して新しいバージョンを取得すると、最終的に、トランクが変更された適切なバージョンの branch2 が得られます。私は願います。開発者に警告します。

于 2011-08-17T22:55:18.697 に答える