対象のファイル名が既に存在するかどうかによって動作が異なります。これは通常、安全メカニズムであり、少なくとも 3 つの異なるケースがあります。
ターゲット ファイルが存在しません:
この場合svn mv
、次のように動作するはずです。
$ svn mv old_file_name new_file_name
A new_file_name
D old_file_name
$ svn stat
A + new_file_name
> moved from old_file_name
D old_file_name
> moved to new_file_name
$ svn commit
Adding new_file_name
Deleting old_file_name
Committing transaction...
ターゲット ファイルは既にリポジトリに存在します:
この場合、ソース ファイルの名前を変更する前に、ターゲット ファイルを明示的に削除する必要があります。これは、次のように同じトランザクションで実行できます。
$ svn mv old_file_name new_file_name
svn: E155010: Path 'new_file_name' is not a directory
$ svn rm new_file_name
D new_file_name
$ svn mv old_file_name new_file_name
A new_file_name
D old_file_name
$ svn stat
R + new_file_name
> moved from old_file_name
D old_file_name
> moved to new_file_name
$ svn commit
Replacing new_file_name
Deleting old_file_name
Committing transaction...
の出力の はsvn stat
、R
ファイルが置き換えられたこと、およびファイルに履歴があることを示します。
ターゲット ファイルは既にローカルに存在します(バージョン管理されていません):
この場合、ローカル ファイルの内容は失われます。問題がなければ、既存のファイルの名前を変更する前に、ファイルをローカルで削除できます。
$ svn mv old_file_name new_file_name
svn: E155010: Path 'new_file_name' is not a directory
$ rm new_file_name
$ svn mv old_file_name new_file_name
A new_file_name
D old_file_name
$ svn stat
A + new_file_name
> moved from old_file_name
D old_file_name
> moved to new_file_name
$ svn commit
Adding new_file_name
Deleting old_file_name
Committing transaction...