Поведінка відрізняється залежно від того, чи ім'я цільового файлу вже існує чи ні. Зазвичай це механізм безпеки, і є принаймні 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...
file://...
абоsvn://...
чиhttp://...
в файл.