Zachowanie różni się w zależności od tego, czy nazwa pliku docelowego już istnieje, czy nie. Zwykle jest to mechanizm zabezpieczający i są co najmniej 3 różne przypadki:
Plik docelowy nie istnieje:
W takim przypadku svn mv
powinno działać w następujący sposób:
$ 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...
Plik docelowy już istnieje w repozytorium:
W takim przypadku plik docelowy musi zostać jawnie usunięty, zanim będzie można zmienić nazwę pliku źródłowego. Można to zrobić w tej samej transakcji w następujący sposób:
$ 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...
W wyjściu svn stat
The R
wskazuje, że plik został zastąpiony, a plik ma swoją historię.
Plik docelowy już istnieje lokalnie (niewersjonowany):
W takim przypadku zawartość pliku lokalnego zostanie utracona. Jeśli to jest w porządku, plik można usunąć lokalnie przed zmianą nazwy istniejącego pliku.
$ 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://...
czysvn://...
lubhttp://...
do pliku.