如何在Subversion托管文件名中转义@字符?

wes*_*ton 189 svn escaping

对于许多Subversion操作,将"@"符号附加到文件或URL参数的末尾允许您定位该文件的特定修订.例如,"svn info test.txt@1234"将提供有关test.txt的信息,因为它存在于修订版1234中.

但是,当文件名包含@时,Subversion会将其错误地解释为修订说明符:

svn info'test @ .txt'svn:语法错误解析修订版'.txt'

我尝试过双引号和单引号以及使用'/','\'和'@'转义.如何告诉Subversion将@符号视为文件名的一部分?

Rob*_*edy 281

来自SVN的书(重点补充):

感知读者可能在这一点上想知道peg修订版语法是否会导致工作副本路径或实际上有符号的URL出现问题.毕竟,svn如何知道news@11我树中的目录名称还是" 新闻修订版11"的语法?值得庆幸的是,虽然svn将始终假设后者,但有一个简单的解决方法.您只需要在路径的末尾附加一个at符号,例如news@11@.svn只关心参数中的最后一个符号,并且在符号之后省略文字peg修订说明符并不被认为是非法的.此解决方法甚至适用于以符号结尾的路径 - 您将用于filename@@讨论名为filename @的文件.

  • 请注意,对于使用"svn diff",您需要添加revision参数."svn up @ file @"有效,但"svn diff @ file @"不起作用.你需要使用"svn diff -r HEAD @ file @" (4认同)

Dav*_*d H 82

原始答案是正确的,但可能不够明确.特定的unix命令行选项如下:

svn info 'image@2x.png@'
Run Code Online (Sandbox Code Playgroud)

要么

svn info "image@2x.png@"
Run Code Online (Sandbox Code Playgroud)

要么

svn info image\@2x.png\@
Run Code Online (Sandbox Code Playgroud)

我刚测试了这三个.

  • 我还测试了`svn info icon @ 2x.png @`,它也有效.是的,没有引号或斜线! (4认同)

Lcs*_*sky 14

在不同子文件夹中添加多个文件的解决方案:

for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done
Run Code Online (Sandbox Code Playgroud)

只需将" @ .png"中的"png"替换为您要添加的文件类型即可.


小智 11

添加以下文件:image@2x.png执行以下操作:svn add image\@ 2x.png @


Ale*_*huk 10

只需添加

@

在你需要使用的文件中,无论它是什么SVN命令,例如:

file@2x.jpg
Run Code Online (Sandbox Code Playgroud)

file@2x.jpg@
Run Code Online (Sandbox Code Playgroud)


NPi*_*ike 8

在我的情况下,我需要从包含@符号的SVN仓库中删除文件:

这不起作用:

svn remove 'src/assets/images/hi_res/locales-usa@2x.png'
Run Code Online (Sandbox Code Playgroud)

但这样做:

svn remove 'src/assets/images/hi_res/locales-usa@2x.png@'
Run Code Online (Sandbox Code Playgroud)


lir*_*uqi 5

要添加多个文件,还有其他解决方案:

svn status | grep \.png | awk '{print $2"@"}'| xargs svn add
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用awk而不是grep:`svn status | awk'/\.png/ {print $ 2"@"}'| xargs svn add` (2认同)