如何使用svn重命名文件?

时间:2013-06-24 16:04:20

标签: svn

当我尝试svn mv old_file_name new_file_name时,我得到了

 svn: Path 'new_file_name' is not a directory

正确的方法是什么? (对不起,这看起来很琐碎,但我被困住了。)

PS。使用svn版本1.6.11

编辑似乎只有在new_file_name引用当前受版本控制的文件名时才会出现此错误。在这种情况下,当然,我可以简单地

 mv old_file_name new_file_name
 svn delete old_file_name

5 个答案:

答案 0 :(得分:100)

根据目标文件名是否已存在,行为会有所不同。它通常是一种安全机制,至少有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...

答案 1 :(得分:16)

使用TortoiseSVN可以在Windows上轻松工作。

http://tortoisesvn.net/

右键单击文件 - > TortoiseSVN菜单 - >回购浏览器 - >右键单击存储库中的文件 - >重命名 - >按Enter键 - >单击确定

使用SVN 1.8.8 TortoiseSVN版本1.8.5

答案 2 :(得分:4)

如果您使用的是不区分大小写的文件系统(例如在Mac上)并且您正在尝试将名称大写(或其他更改案例),则会显示此消息。 在这种情况下,您需要重命名为第三个虚拟名称:

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

答案 3 :(得分:0)

如果您在SVN中创建/提交它之前在磁盘上创建了新目录。您需要的只是在SVN中创建它并在之后移动:

$ 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

答案 4 :(得分:-3)

您可以按照以下3个步骤执行此操作:

 - svn rm old_file_name
 - svn add new_file_name
 - svn commit