如何在Subversion托pipe文件名中转义@字符?
对于许多Subversion操作,将“@”符号附加到文件或URL参数的末尾允许您定位该文件的特定修订版本。 例如,“svn info test.txt@1234”将提供有关test.txt的信息,因为它存在于1234版本中。
但是,当文件名包含@时,Subversion将其错误地解释为修订说明符:
svn info'test @ .txt'svn:Syntax error parsing revision'.txt'
我尝试过使用双引号和单引号以及“/”,“\”和“@”。 我如何告诉Subversion将@符号作为文件名的一部分?
从SVN书 (强调增加):
感知型读者可能想知道在这一点上,peg修订版本语法是否会导致工作副本path或实际上具有标志的URL。 毕竟, svn怎么知道
news@11
是否是我树中的一个目录的名字,或者只是“ 新闻修订版11”的语法? 值得庆幸的是,虽然svn将总是假设后者,但是有一个简单的解决方法。 你只需要在path的末尾附加一个at符号 ,比如news@11@
。 svn只关心参数中的最后一个符号,在符号之后忽略字面peg修订说明符并不认为是非法的。 此解决方法甚至适用于以符号结尾的path – 您将使用filename@@
来讨论名为filename @的文件。
原来的答案是正确的,但也许不够明确。 特定的unix命令行选项如下:
svn info 'image@2x.png@'
要么
svn info "image@2x.png@"
要么
svn info image\@2x.png\@
我只是testing了这三个。
在不同的子文件夹中添加多个文件的解决scheme:
for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done
只需将“ @ .png”中的“png”replace为您要添加的文件types即可。
添加以下文件:image@2x.png执行以下操作:svn add image \ @ 2x.png @
在我的情况下,我需要从包含@符号的SVN仓库中删除文件:
这不会工作:
svn remove 'src/assetshttp://img.dovov.comhi_res/locales-usa@2x.png'
但是这样做了:
svn remove 'src/assetshttp://img.dovov.comhi_res/locales-usa@2x.png@'
要添加多个文件,还有其他解决scheme:
svn status | grep \.png | awk '{print $2"@"}'| xargs svn add
只需添加
@
在你需要使用的文件中,不pipe是什么SVN命令,例如:
file@2x.jpg
至
file@2x.jpg@
对于带有2个参数(如“move”)的svn命令, 只能在左边(第一个)参数中加上“@”。 例如:
$ 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”处追加“@”
@大卫H
我只是尝试了一个类似的命令,而不逃避@符号,它仍然正常工作
svn ci splash.png splash@2x.png@
这是GNU bash,版本3.2.48(1) – 释放(x86_64-apple-darwin10.0)和svn 1.6.16