argius note

プログラミング関連

続・Subversiveのsvn:ignoreの罠

前回(2009-01-24)とほぼ同じ事故です。でも、書かずに居られないので書きます。


私は、プロジェクト全体に対してSVNの操作をする場合、基本的に"Team Synchronizing Perspective"(チーム同期化)を使います。これは、その操作上での出来事です。
SVNプロパティを変更(ignoreを追加)したら、プロジェクトのルートがconflict(赤の矢印)になったので、これを回避するために"Mark as Merged"(マージ済としてマーク)を実行しました。すると、進捗バーに"revert file..."と表示されています。"revert"(リポジトリの最新に復元)なんてした覚えは無いのに。慌ててキャンセルしたのですが、なんと、まだコミットしていない他のファイルが復元されてしまったのです。
不幸中の幸いで、消されてしまった変更は大したものではなく、それ自体のダメージはそれほど大きくはありませんでした。痛いのは、同様の問題を繰り返してしまったことです。やっぱり、ちゃんと調べないとダメですね。


ここで再確認。
今回の現象は、プロジェクトのSVNプロパティを変更した場合に発生します。プロジェクトのところがconflictになった時、他にコミットしていない変更がある場合は、"Override and Update"はもちろん、"Override and Commit"も"Mark as Merged"も実行してはいけません。他の変更を全てコミットしてから、"Mark as Merged"もしくは"Override and Commit"をすれば良いでしょう。
この動作は、仕様どおりだとしても、直感的でなく、誤操作を招きやすいのではないでしょうか。この辺りはまだちゃんと調べられていないので、今後の課題としたいと思います。