如何使用svn重命名文件?

如何使用svn重命名文件?,svn,Svn,当我尝试svn mv old\u file\u name new\u file\u name时,我得到 svn: Path 'new_file_name' is not a directory 正确的方法是什么?(对不起,这看起来很琐碎,但我被卡住了) PS.使用svn版本1.6.11 EDIT似乎只有当new\u file\u name引用当前受版本控制的文件名时,我才会出现此错误。当然,在这种情况下,我可以简单地 mv old_file_name new_file_name svn

当我尝试
svn mv old\u file\u name new\u file\u name
时,我得到

 svn: Path 'new_file_name' is not a directory
正确的方法是什么?(对不起,这看起来很琐碎,但我被卡住了)

PS.使用svn版本1.6.11

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

 mv old_file_name new_file_name
 svn delete old_file_name

行为的不同取决于目标文件名是否已存在。这通常是一种安全机制,至少有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 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...

对我来说,使用乌龟很容易在Windows上工作

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

使用SVN 1.8.8
OrtoiseSVN 1.8.5版

您可以通过以下三个步骤来完成:

 - svn rm old_file_name
 - svn add new_file_name
 - svn commit

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

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

如果在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

也许您需要完整的存储库路径,
file://...
svn://...
http://...
添加到文件中。我需要将--force添加到svn rm new_file_name中,因为它抱怨new_file不受版本控制。。。我必须创建一个名为new_file_name的空文件。在1.8.3 rm中删除了物理文件,只运行“svn mv…”就足够了,它执行一个D。有趣的是,svn有多旧,使用它重命名文件有多尴尬。@Ghasan:问题的标题可能会有误导性。它是关于删除一个文件,同时重命名另一个文件。这个用例并不常见,对于大多数风投来说有点棘手,特别是如果信息应该在历史记录中可见的话。并不是说OP询问的是Windows,但是升级投票值得扩展:完全桌面集成意味着你可以在资源管理器的上下文菜单中完成这项工作。但是现在我看到,在Windows上发布一个关于Linux问题的答案已经让这个问题多次被否决。(drats,我编辑原始评论的时间不多了)当时我在Windows上使用Cygwin,所以有一些交叉。如果不在Windows上使用TortoiseSVN,我无法让它工作。所以我很感谢这个答案。我比你高。使用任何其他东西都会导致它在我更新时恢复。在我的例子中,更改是文件名的大小写。我认为我的问题源于Windows不区分大小写。这是可行的,但您将丢失文件的历史记录。这种方法不好,因为它会丢失文件的历史记录