当我尝试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
答案 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上轻松工作。
右键单击文件 - > 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