web-dev-qa-db-ja.com

ツリーの衝突により壊れたsvnマージ機能

いつsvnチームがツリーの競合を発生させることにしたかはわかりませんが、svnのマージ機能が完全に壊れています。

ブランチがあり、トランクの最新の変更をブランチにマージしたい。私はすでにそのようなマージを1つ実行しましたが、これはツリーの競合のために失敗します。コマンドは次のとおりです。

$ svn --force merge -r 3185:3192 svn://chamar2/rx-services/SAMS .
svn: Attempt to add tree conflict that already exists

初めてこのマージを試みたとき(--forceなしで)、ツリーの競合が発生するだけで何もマージされませんでした。これで、上記のメッセージが報告されます。

ブランチの作業コピーでsvn statusを実行すると、まだトランクにマージされていない変更があるすべてのファイルが表示されます。もちろん、私のブランチの目的は、これらの変更がまだトランクにない場合に行うことです。

彼らがこれをしたとき、彼らは何を考えていましたか?

ツリーの競合の原因と、svnがこれらを作成したので作業を続行する方法について、使用可能な情報は見つかりませんでした。

ツリーの競合を忘れて、以前のようにマージを行うようにsvnに指示する方法はありますか?

私は1.6クライアントと古いsvnサーバー(おそらく1.3.1)を使用しています。

28
Dean Schulze

問題は、私がparent/trunk /ディレクトリの代わりにparent /ディレクトリをマージのソースとして選択したことでした。ユーザーエラーでしたが、ツリーの競合メッセージは混乱を招きます。 svnが先に進んでマージを実行した場合、問題はすぐにわかりました。

ツリーの競合により、慣れるまでに時間がかかる新​​しいメッセージセマンティクスが導入されました。

ツリーの競合に関する亀のドキュメントへのポインタをありがとう。これは、ブランチでの作業に取り組む唯一のドキュメントです。ただし、この例では、ブランチで変更したファイルでツリーの競合が発生した理由を説明していません。ツリーの競合メッセージは、慣れるまでに時間がかかります。

ほとんどの場合、ツリーの競合を解決済みとしてマークするだけで、ツリーの競合は単なるノイズのように見えます。

Mark Phippardは、古いバージョンのサーバーはツリーの競合を引き起こさないと述べています。マージ追跡サポートが必要で、サーバーが1.5より前の場合にのみ、サーバーを更新する必要があります。どうやらマージ追跡は古いsvnサーバーに欠けている唯一のものです:

http://Eclipse.open.collab.net/ds/viewMessage.do?dsForumId=62&dsMessageId=332448
14
Dean Schulze

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

競合を生成するマージを行った後、同じマージを再度実行したため、Subversionが不満を示しています。 SVNは競合を追加しようとしましたが、競合は前のマージ操作によってすでに作成されていることに気付きました。したがって、警告を正しく出力します。

マージ操作を行い、結果に満足できない場合は、他のことを試す前に、まずローカルの変更を元に戻す必要があります。

元のツリーの競合について:動作が古いクライアントと異なる理由とそのような競合を解決する方法を理解するには、SVNブックの ツリーの競合に関するセクション を読む必要があります。 tortoiseSVNマニュアルには、優れた ツリーの競合に関するトピック もあります。

10
Wim Coenen

1.6クライアントと1.3サーバーの間の不適切な相互作用を観察していると思います。ツリー競合検出は1.6の新機能です。また、マージのサポートが1.5で変更されました(そして、はるかに使いやすくなりました)。

サーバーとリポジトリの形式を1.6にアップグレードしてみます。別の方法として、1.5(ツリーの競合なし)または1.4(および新しいマージもなし)クライアントを使用します。

繰り返しますが、これはすべて推測であり、実際には役に立たない可能性があります...

2

Hey Guysまったく同じ問題が発生しました。SVNマージを実行しようとしたときにツリーが競合しました。それはローリナスが完全に正しかったことがわかります。 svnリポジトリが古いバージョンだったために発生していました。サーバーでは、ディレクトリ{repopath}\db\formatに移動し、フォーマットファイル内に「2」が含まれています。

私がしたことはすべて、

svnadmin upgrade {repopath}

それはかなり無痛でした。

それを行った後、マージ追跡を使用しようとしたときに、ツリーの競合が発生しなくなりました!先端をありがとう!

0
David