TortoiseSVN 1.7 の WC-NG で eclipse Refactor (Rename, Move)機能が問題なく利用可能に
先日 TortoiseSVN 1.7 がリリースされ、それに伴い WC-NG(Working Copy Next Generation) というファイル管理方法に変更がかかりました。
参考)Subversion 1.7が出たので、TortoiseSVN 1.7でWC-NGやってみた
http://d.hatena.ne.jp/lino/20111014/1318597181
引用
Subversion 1.7の新機能の中でも個人的に嬉しいのが、WC-NG(Working Copy Next Generation)です。WC-NGは作業コピーのメタデータ変更で、フォルダの中にたくさんあった.svnフォルダがルートフォルダだけに集約されます。
今までは各ソースディレクトリ内毎に .svn ができてしまっていたため、eclipse(FDT) の Refactor コマンド(Rename, Move)を用いて「ディレクトリ名の変更」や「ディレクトリを他ディレクトリへ移動」を行うと、作業コピー内ディレクトリの構造が壊れてしまうという問題がありました。しかしこれからはその問題は発生しなくなります。
TortoiseSVN 1.6 以前の問題点
例えば以下のような Subversion 管理のディレクトリ構造があったとします。testA ディレクトリ内には AS3 ソースファイルの SampleA.as と SampleB.as が存在します。
root/ ├ testA/ │ ├ SampleA.as │ └ SampleB.as ├ testB/ └ testC/
実際には以下のように、各ディレクトリ内には隠しディレクトリ .svn/ が存在します。
root/ ├ .svn/ ├ testA/ │ ├ SampleA.as │ ├ SampleB.as │ └ .svn/ ├ testB/ │ └ .svn/ └ testC/ └ .svn/
Refactor Move コマンドを用いて testA ディレクトリを testB ディレクトリの下に移動させると以下のようになります。
root/ ├ .svn/ ├ testB/ │ ├ .svn/ │ └ testA/ │ ├ SampleA.as │ ├ SampleB.as │ └ .svn/ └ testC/ └ .svn/
FDT の Refactor Move コマンドでは testA/SampleA.as と testB/SampleB.as の内容は自動で書き換えてくれますが、testA/.svn/ ディレクトリ内の内容を書き換える機能はありません。上記のように Move コマンドで root/testB/testA/.svn/ に移動しても Subversion 上では root/testA/.svn/ 上に存在している事となり、不整合が発生してしまいます。よって今までは、任意に root/testB/testA/ 内の .svn/ ディレクトリを削除したりしなくてはなりませんでした。
TortoiseSVN 1.7 以降
上記ディレクトリ構造例を TortoiseSVN 1.7 に適用すると以下のようになります。
root/ ├ .svn/ ├ testA/ │ ├ SampleA.as │ └ SampleB.as ├ testB/ └ testC/
Refactor Move コマンドを用いて testA ディレクトリを testB ディレクトリの下に移動させると以下のようになり、ディレクトリ構造の不整合は発生しません。
root/ ├ .svn/ ├ testB/ │ └ testA/ │ ├ SampleA.as │ └ SampleB.as └ testC/