Subversion + Subclipse の罠
最近仕事で Subversion を使用するようになりました。知っている人も多いかと思いますが、Subversion はポスト CVS として、CVS でいまいちだった点が大幅に改良されています。
Subversion の利点の一つに、ファイルの移動やファイル名の変更さえも追跡可能であることが上げられるかと思います。
が、Eclipse プラグインである Subclipse を使用して、以下の操作をした場合は途中で新規ファイルとして扱われてしまい、履歴が途切れてしまいます。
- あるフォルダ内のファイルを異なるフォルダに移動し
- 移動後に、ファイルの名前を変更する
この一連の操作を、間にコミットをはさむことなく行なうと、2. のファイル名変更時に svn move ではなく、svn add と svn delete が使用されます。このため、新たなファイル名のファイルは、新規ファイルとして追加されてしまい、それまでの履歴とのつながりがなくなってしまいます。
私が試した限りでは、これは Subclipse のバグではなく、Subversion 自体が move によって移動されたまだコミットされてないファイルに対して、さらに move することが出来ないことから来ているようです。
TortoiseSVN やコマンドラインの svn コマンドでは、そもそも上記の操作が行なえないことでも、そのことがうかがえます。
Subclipse はそれでもなんとかしてしまおうとしたのか、svn add/delete の組み合わせによってファイル名の変更が行なえているかのように振る舞います。
しかし、この動作は Subversion のポリシーに反するように思えます。上記のような場合には、Subclipse にも素直にエラーを出してほしいです。
Subclipse を使用した場合の解決策?としては、ファイルの移動後に一度コミットしてから、ファイル名の変更を行なうしかないのかもしれません。*1