97 votes

Comment renommer un fichier en utilisant svn ?

Quand j'essaie svn mv old_file_name new_file_name j'obtiens

 svn: Path 'new_file_name' is not a directory

Quelle est la bonne méthode ? (désolé, cela semble si trivial, mais je suis coincé).

PS. utilisant svn version 1.6.11

EDITAR il semble que j'obtienne cette erreur uniquement si new_file_name fait référence au nom d'un fichier qui est actuellement sous contrôle de version. Dans ce cas, bien sûr, je peux simplement

 mv old_file_name new_file_name
 svn delete old_file_name

126voto

nosid Points 20267

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...

19voto

storm_m2138 Points 70

L'utilisation de TortoiseSVN a fonctionné facilement sur Windows pour moi.

http://tortoisesvn.net/

Clic droit sur le fichier -> menu TortoiseSVN -> navigateur de référentiel -> clic droit sur le fichier dans le référentiel -> renommer -> appuyer sur Entrée -> cliquer sur Ok.

Utilisation de SVN 1.8.8 TortoiseSVN version 1.8.5

8voto

superk Points 321

Ce message apparaît si vous utilisez un système de fichiers insensible à la casse (par exemple sur un Mac) et que vous essayez de mettre le nom en majuscules (ou un autre changement de casse). Dans ce cas, vous devez renommer le fichier avec un troisième nom, factice :

svn mv file-name file-name_
svn mv file-name_ FILE_Name
svn commit

0voto

Cela peut être si vous avez créé un nouveau répertoire sur le disque AVANT de le créer/commettre dans le SVN. Tout ce dont vous avez besoin est de le créer dans le SVN et de le déplacer ensuite :

$ svn mv etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/
svn: E155010: Path '/home/dyr/svn/nagioscore/etc/nagios/hosts/us0101/ccs' is not a directory

$ svn status
?       etc/nagios/hosts/us0101/ccs

$ rm -rvf etc/nagios/hosts/us0101/ccs
removed directory 'etc/nagios/hosts/us0101/ccs'

$ svn mkdir etc/nagios/hosts/us0101/ccs
A         etc/nagios/hosts/us0101/ccs

$ svn move etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
A         etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
D         etc/nagios/hosts/us0101/cs/us0101ccs001.cfg

$ svn status
A       etc/nagios/hosts/us0101/ccs
A  +    etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
        > moved from etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
D       etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
        > moved to etc/nagios/hosts/us0101/ccs/us0101accs001.cfg

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X