如何在Subversion中移动/重命名一个包含@字符的文件

8

来自SVN书籍

敏锐的读者可能会想知道,如果工作副本路径或URL中实际上有@符号,那么钉住修订版本语法是否会导致问题。毕竟,svn如何知道news@11是我的树中一个目录的名称还是“新闻”的第11个修订版本的语法?值得庆幸的是,虽然svn总是假定后者,但有一个微不足道的解决方法。您只需要在路径末尾添加一个@符号,例如news@11@。svn仅关心参数中最后一个@符号,并且省略该@符号之后的文字钉住修订版本说明符并不违法。这种解决方法甚至适用于以@符号结尾的路径-您将使用filename@@来引用名为filename@的文件。


根据这个描述,你只需要在路径中添加一个 @ 符号。
所以这样写:

svn add "C:\SomeTests\my@file.txt"

会给我返回以下错误:

svn: E200009: 'C:/SomeTests/my@file.txt': a peg revision is not allowed here

而这样写:

svn add "C:\SomeTests\my@file.txt@"

对我来说是有效的。
同时这样也可以:

svn info "C:\SomeTests\my@file.txt@"

更多信息请参见:如何转义 Subversion 中管理的文件名中的 @ 字符?

好的,没问题。 但是当我想要重命名或移动一个带有@字符的文件时,它会提供奇怪的结果:

使用:

svn mv "C:\SomeTests\test.txt" "C:\SomeTests\my@file.txt"

我得到了这个文件名:

C:\SomeTests\my@file.txt

使用以下命令:

svn mv "C:\SomeTests\test.txt" "C:\SomeTests\my@file.txt@"

我得到的文件名为:

my@file.txt@

使用以下命令:

svn mv "C:\SomeTests\test.txt" "C:\SomeTests\@myfile.txt"

我得到的文件名是:

somefolder@myfile.txt

使用以下命令:

svn mv "C:\SomeTests\test.txt" "C:\SomeTests\@myfile.txt@"

我得到了这个文件名:

@myfile.txt@

我应该怎么做才能让它始终有效?无论@符号是在开头、中间还是结尾。

(编辑:在我的当前问题中,这些字符总是在开头或第二个位置。)

3个回答

2

我曾经无处寻求支持,但现在通过试错法找到了解决方案。

只需像这样运行命令:

svn mv "C:\@File.txt@\" "C:\@NewFile.txt/"

在源路径中添加@(At)和\(Backslash)。在目标路径中添加/(Forwardslash)。

每个选项对我都有效:

@File to NoAtFile
@File to New@File
@File to @NewFile
NoAtFile to New@File
NoAtFile to @NewFile
_@File to NoAtFile
_@File to New@File
_@File to @NewFile

我希望这可以帮助你避免我曾经遇到的麻烦。 :)

1
很好的问题,可疑的答案...这似乎被打错了,可能没有从命令行复制。我现在不在Windows上,无法测试你的解决方案。另外,我正在使用svn在Linux上重命名一个带有@符号的目录。
svn mv "WindowListGroup@bcdev.arch@gmail.com@" "AdvancedWindowList@bcdev.arch@gmail.com"

请注意,源名称末尾的单个@符号可以转义任意数量的@符号。目标名称按字面意思解释。
另请参阅:此 SO 帖子

0
我尝试重命名一堆文件,它们都包含一个"@"符号。
以下是我使用的PowerShell命令:
Get-ChildItem | ForEach-Object {svn mv ($_.Name+'@') $_.Name.replace("abc", "def")}

它重命名当前文件夹中的所有文件。如果文件名没有改变,则会为该文件显示错误消息,但操作将继续。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接