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