对于许多Subversion操作,将“@”符号附加到文件或URL参数的末尾允许您定位该文件的特定修订。例如,“svn info test.txt@1234”将提供有关test.txt的信息,因为它存在于修订版1234中。
但是,当文件名包含@时,Subversion会将其错误地解释为修订说明符:
svn info'test @ .txt' svn:语法错误解析修订版'.txt'
我尝试过双引号和单引号以及使用'/','\'和'@'转义。如何告诉Subversion将@符号视为文件名的一部分?
答案 0 :(得分:277)
从SVN book(强调添加):
感知读者可能在这一点上想知道,peg修订版语法是否会导致工作副本路径或实际上有符号的URL出现问题。毕竟, svn 如何知道
news@11
是我树中目录的名称还是“ news 的修订版11”的语法?值得庆幸的是,虽然 svn 总是假设后者,但有一个简单的解决方法。 您只需在路径末尾附加一个at符号,例如news@11@
。 svn 只关心参数中的最后一个符号,并且在符号后省略文字peg修订说明符并不被认为是非法的。此解决方法甚至适用于以at符号结尾的路径 - 您将使用filename@@
来讨论名为 filename @ 的文件。
答案 1 :(得分:82)
原始答案是正确的,但也许不够明确。特定的unix命令行选项如下:
svn info 'image@2x.png@'
或
svn info "image@2x.png@"
或
svn info image\@2x.png\@
我刚测试了这三个。
答案 2 :(得分:14)
在不同子文件夹中添加多个文件的解决方案:
for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done
只需将“ @ .png”中的“png”替换为您要添加的文件类型。
答案 3 :(得分:11)
添加以下文件:image@2x.png执行以下操作: svn add image \ @ 2x.png @
答案 4 :(得分:9)
只需添加
@
在你需要使用的文件中,无论它是什么SVN命令,例如:
file@2x.jpg
到
file@2x.jpg@
答案 5 :(得分:8)
在我的情况下,我需要从包含@符号的SVN仓库中删除文件:
这不起作用:
svn remove 'src/assets/images/hi_res/locales-usa@2x.png'
但是这样做了:
svn remove 'src/assets/images/hi_res/locales-usa@2x.png@'
答案 6 :(得分:5)
要添加多个文件,还有其他解决方案:
svn status | grep \.png | awk '{print $2"@"}'| xargs svn add
答案 7 :(得分:1)
对于带有2个参数的svn命令,例如“move”,你必须在left(first)参数中附加“@” only 。例如:
$ svn add README@txt@
A README@txt
$ svn move README@txt@ README2@txt
A README2@txt
D README@txt
$ svn status
A README2@txt
$ svn commit -m "blah"
Adding README2@txt
Transmitting file data .
Committed revision 168.
$ svn delete README2@txt@
D README2@txt
$ svn commit -m "blahblah"
*Deleting README2@txt
Committed revision 169.
这一行非常重要: $ svn move README @txt @ README2 @txt
如您所见,我们无需在“README2 @ txt”附加“@”
答案 8 :(得分:0)
@David H
我只是尝试了一个类似的命令而没有转义@符号,它仍然可以正常工作
svn ci splash.png splash@2x.png@
这是在GNU bash上,版本3.2.48(1)-release(x86_64-apple-darwin10.0)和svn 1.6.16
答案 9 :(得分:0)
对我有用的唯一解决方案与@NPike建议相同
svn revert' path / to / filename @ ext @'
答案 10 :(得分:0)
今天我遇到了使用电子邮件地址生成的文件名的问题(不是一个好主意!)。
解决方案,使用printf
的{{1}}选项和shell扩展
find