Le comportement diffère selon que le nom du fichier cible existe déjà ou non. C'est généralement un mécanisme de sécurité, et il y a au moins 3 cas différents :
Le fichier cible fait pas existent :
Dans ce cas svn mv
devrait fonctionner comme suit :
$ 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...
Le fichier cible existe déjà dans le référentiel :
Dans ce cas, le fichier cible doit être supprimé explicitement, avant que le fichier source puisse être renommé. Cela peut être fait dans la même transaction comme suit :
$ 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...
Dans la sortie de svn stat
le R
indique que le fichier a été remplacé, et que le fichier a un historique.
Le fichier cible existe déjà localement (non versionné) :
Dans ce cas, le contenu du fichier local serait perdu. Si cela ne pose pas de problème, on peut alors supprimer le fichier local avant de renommer le fichier existant.
$ 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...