90

当我尝试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
4

4 回答 4

117

根据目标文件名是否已经存在,行为会有所不同。它通常是一种安全机制,至少有 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 statR表示文件已被替换,并且文件具有历史记录。

目标文件已在本地存在(未版本化):

在这种情况下,本地文件的内容将会丢失。如果没问题,则可以在重命名现有文件之前在本地删除该文件。

$ 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...
于 2013-06-24T20:26:24.950 回答
17

使用 TortoiseSVN 在 Windows 上对我来说很容易。

http://tortoisesvn.net/

右键单击文件 -> TortoiseSVN 菜单 -> Repo-browser -> 右键单击​​存储库中的文件 -> 重命名 -> 按 Enter -> 单击确定

使用 SVN 1.8.8 TortoiseSVN 版本 1.8.5

于 2014-03-26T18:33:57.620 回答
6

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

svn mv file-name file-name_
svn mv file-name_ FILE_Name
svn commit
于 2016-10-19T09:34:08.830 回答
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
于 2018-06-08T18:31:08.343 回答