Aptanaを使用してColdFusionのWebサイトを開発しています。バージョン管理にはSVNを使用しています。
いくつかのファイルの名前を変更し、そのうちの1つをコミットしようとしているのですが、以下のエラーが発生します。
'SVN Commit' has encountered a problem.
org.apache.subversion.javahl.ClientException: Illegal target for the requested operation
svn: Commit failed (details follow):
svn: Cannot commit 'R:\myPath\My-New-File-Name.cfm' because it was moved from 'R:\myPath\My-Old-File-Name.cfm' which is not part of the commit; both sides of the move must be committed together
これは、名前を変更した前のファイルと新しい名前を変更したファイルを一緒にコミットする必要があることを示しているようです。もう存在しないファイルをコミットするにはどうしたらいいのでしょうか・・・?
ファイルではなく、ディレクトリをコミットする。
ディレクトリを、それが含まれるファイルのリストを含むテキストファイルと考えると、正常にコミットするためには、古いエントリを削除して新しいエントリを追加できるように、ディレクトリ自体を更新する必要があることがわかります。これは SVN では古いファイルを削除し、新しいファイルを追加したものとして表示されます (つまり、ファイルへの 1 つの変更ではなく、ディレクトリへの 2 つの変更です)。
もし1つのファイルだけをコミットしたい場合は、他の変更されたファイルを一時的に無視リストに追加する必要があります。
クライアントによって、うまく処理できる場合とそうでない場合があるようです。
AnkhSVN for Visual Studioでこのエラーに遭遇し、対処できない。
TortiseSVN(シェルエクステンション)は、古いファイルを削除し、新しいファイルを追加することを知っているので、動作します。
ですから、もしあなたがWindowsを使っているなら、これを回避する簡単な方法は、エクスプローラからTortiseSVNを使って、ディレクトリにコミットすることです(これにより、古いファイル名が削除され、新しいファイル名が追加されます)。
eclipseとsubversionでは、プロジェクトの上位のフォルダでTeam->synchronizeを行い、新旧両方のファイル名と場所を網羅することで、この混乱したエラーを回避することが出来ました。 もし、ファイルを移動して名前を変更した場合や、何が起こっているのか正確に把握できない場合は、プロジェクトの最上位で同期をとっても損はないでしょう。
そうすると、名前を変更したファイルの旧バージョンが同期ビューに表示されました。 一旦、それらに "override and commit" を使用すると、それらは再び消えました。 この時点で、新しいものがようやく正しくコミットされるようになります。