SVNでマージしようとしたらRetrieval of mergeinfo unsupported

どうも、うしねずみです。

最近Flexアプリをeclipse + FlexBuilderプラグイン + subclipseで開発しています。subclipseって言うのはeclipse上で使えるSVNクライアントのプラグインです(他にはsubversiveというのが有名らしい)。

それで、今日コードをSVNリポジトリのtrunkにマージしようとしたら問題が。。。

Retrieval of mergeinfo unsupported by “svn+ssh://hogehoge”

って言われるのです。
どうやら、SVNサーバのバージョンが古くて、SVNクライアント側が必要としている情報が見つからないらしい。ちなみに subclipseのバージョンは1.6.5で、SVNサーバのバージョンは1.2.3。SVNのバージョンは”svn –version”で確認できます。

さて問題が起きた流れを説明してみます。

まず、マージしたいプロジェクトを右クリックして「Team」>「マージ」を選択します。するとマージのダイアログが立ち上がります。
ここです!
私は機能ブランチが完成してトランクにマージしようとしていたので「Reintegrate a branch」 を選びました。これが失敗の原因。 私が使ってるバージョンのsubclipseでは、ブランチを再統合しようとすると、マージすべきリビジョンの範囲をブランチの過去のマージの情報から勝手に取得してくれるっぽいのですが、SVNサーバのバージョンが古いと「ブランチの過去のマージの情報」っていうのが残らないらしく、「そんな情報はないよ」みたいに怒れられるっぽいです。

なので「Merge a range of revisions」を選んで、手動でマージするリビジョン範囲を指定しましょう。
なお、この場合の注意点は、今回どのリビジョンまでをマージしたかを記録しておかないと、次のマージの時にマージすべきリビジョン範囲が分からなくなります。
例えば今回リビジョン1000までマージしたのなら、次回のマージは1001~HEADリビジョンとなるはずです。

SVNはマージの方法とか理解しにくくていつも苦労します。それから「リビジョン」に対する考え方がSVNのコマンドラインクライアントとtortoiseSVN(メジャーなSVNクライアントソフト)では違うらしく、注意が必要です。

TortoiseSVN とコマンドラインクライアントを比較すると、リビジョン範囲を指定する方法に重要な違いがあります。これを思い浮かべる簡単な方法は、フェンスの柱と、フェンスの板について考えることです。コマンドラインクライアントでは、 で指定した 2 本の 「フェンスの柱」 のリビジョンを使用して、マージする変更を指定します。TortoiseSVN では、「フェンスの板」 を使用して、マージする変更セットを指定します。マージするためのリビジョンを指定するログダイアログを使用する場合、チェンジセットとしてどこに各リビジョンが現れるか、明白になるためです。かたまりとしてリビジョンをマージしていると、subversion book にある方法では、今回 100-200 をマージし、次回に 200-300 をマージすることになります。TortoiseSVN では、今回 100-200 をマージし、次回に 201-300 をマージします。この違いは、メーリングリストでたくさんの論争を巻き起こしてきました。私たちは、コマンドラインクライアントと違うことを認めます。しかし、大多数の GUI ユーザにとって、私たちが実装した方法の方が理解しやすいと信じています。

でも、SVNが無い開発はデグレしまくるだろうし、恐ろしくてやってられません。以前マージを手動で(WinMergeというマージツールを使って)一つずつファイルを開いてやったことがありましたが、死にました。
これからもお世話になります、SVN。