对于许多Subversion操作,在文件或URL参数的末尾附加'@'符号可让您定位该文件的特定修订版。例如,“ svn info test.txt@1234”将提供有关test.txt的信息,因为它存在于版本1234中。
但是,当文件名包含@时,Subversion会将其错误地解释为修订说明符:
svn信息'test @ .txt'svn:语法错误解析修订'.txt'
我已经尝试了双引号和单引号以及用'/','\'和'@'转义。如何告诉Subversion将@符号视为文件名的一部分?
对于许多Subversion操作,在文件或URL参数的末尾附加'@'符号可让您定位该文件的特定修订版。例如,“ svn info test.txt@1234”将提供有关test.txt的信息,因为它存在于版本1234中。
但是,当文件名包含@时,Subversion会将其错误地解释为修订说明符:
svn信息'test @ .txt'svn:语法错误解析修订'.txt'
我已经尝试了双引号和单引号以及用'/','\'和'@'转义。如何告诉Subversion将@符号视为文件名的一部分?
Answers:
从SVN书中(添加重点):
敏锐的读者可能会怀疑此时钉钉修订版语法是否会导致工作副本路径或URL中实际带有符号的问题。毕竟,svn如何知道
news@11
我的树中的目录名称还是“ news第 11版”的语法?值得庆幸的是,尽管svn始终假定后者,但有一个简单的解决方法。您只需要在路径末尾附加一个at符号,例如news@11@
。svn只关心参数中的最后一个符号,在符号后省略文字挂钩修订说明符被认为是非法的。此解决方法甚至适用于以at符号结尾的路径-您可以使用filename@@
谈论文件filename @。
news@11
也可以是文件。
@foo
为@bar
,svn rename @foo@ @bar
则会抱怨@bar
;但是如果做到了svn rename @foo@ @bar@
,新名称就会字面上了@bar@
。为避免这种情况,请添加./
(或.\
在Windows上)以使其清楚是本地路径:svn rename @foo@ ./@bar
。
原始答案是正确的,但可能不够明确。特定的unix命令行选项如下:
svn info 'image@2x.png@'
要么
svn info "image@2x.png@"
要么
svn info image\@2x.png\@
我刚刚测试了全部三个。
svn info icon@2x.png@
,它也起作用。是的,没有引号或斜杠!
bash
高速公路上:)
在不同的子文件夹中添加多个文件的解决方案:
for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done
只需将“ @ .png”中的“ png”替换为您要添加的文件类型即可。
@
名称中带有文件的文件作为特例处理,您可以安全地将@
符号附加到所有文件名:中for file in $(find ./ -type f -iname "*.png"); do svn add "$file@"; done
。另外,这种方法是否会使您的svn repo的文件/目录结构与工作的本地副本不一致?
exec
find可能更容易:find . -type f -name "*@*.png" -exec svn add {}@ \;
添加以下文件:image@2x.png请执行以下操作:svn添加image \ @ 2x.png @
只需添加
@
无论您使用什么SVN命令,都需要使用该文件的,例如:
file@2x.jpg
至
file@2x.jpg@
要添加多个文件,有替代的解决方案:
svn status | grep \.png | awk '{print $2"@"}'| xargs svn add
svn status | awk '/\.png/ {print $2"@"}'| xargs svn add
对于带有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”后面附加“ @”
唯一适用于我的解决方案与@NPike建议的相同
svn恢复'path / to / filename @ ext @'
我今天遇到了从电子邮件地址生成的文件名的问题(不是一个好主意!)。
解决方案,使用 ,和Shell扩展printf
选项find
svn add $(find . -name "*@*.png" -printf "%p@ ")