行为因目标文件名是否已存在而异。这通常是一种安全机制,至少有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...
file://...
或svn://...
或http://...
到文件中。