繁体   English   中英

为什么Subversion跳过包含@符号的文件?

[英]Why Subversion skips files which contain the @ symbol?

当我尝试执行这样的命令时(从命令行或Perl脚本执行-没关系):

svn revert "build\myfile@test.meta"

SVN跳过此文件并输出:

Skipped 'build\myfile'

我试着做:

svn revert "build\*.meta"

但这给出了相同的结果。

我可以从GUI恢复这些文件。 而且我可以通过执行这些文件的还原(但是它还原的幅度比我想要的还要多):

svn revert --recursive "build"

有没有解决方法?

Subversion中的@登录文件名实际上具有特殊含义-固定的修订号。 引用Subversion书

敏锐的读者可能会怀疑此时钉钉修订版语法是否会导致工作副本路径或URL中实际带有符号的问题。 毕竟,svn怎么知道news @ 11是我树中目录的名称还是只是“新闻修订版11”的语法? 值得庆幸的是,尽管svn始终假定后者,但有一个简单的解决方法。 您只需要在路径末尾附加一个at符号,例如news @ 11 @。 svn只关心参数中的最后一个符号,在符号后省略字面钉修订说明符被认为是非法的。 此解决方法甚至适用于以at符号结尾的路径-您可以使用filename @@来谈论名为filename @的文件。

因此,您应该在脚本中的文件名后附加@符号,如下所示:

svn revert "build\myfile@test.meta@"

只是要添加到上述正确答案中,如果您要批量处理很多文件名中带有“ @”符号的文件(即使用*通配符),则可以在OS X Terminal中执行以下操作(或任何Linux机器):

find . -name "*@*" | xargs -I % svn add %@

上面的命令将使用find实用程序列出每个文件名中带有@的文件,然后使用XARGS将文件路径通过管道传递到SVN。 XARGS将用路径替换每次出现的%,并在文件名末尾附加特殊的“ @”,以便SVN接受它。

希望这会有所帮助-我不得不摆弄头以添加我的应用程序要升级到iOS4.0所需的gazzilion @ 2x.png文件

只需使用cmd.exe shell在Windows上对其进行了正确的测试-将名称括在双引号中即可:

ctmkx> svn revert "trunk\foo@bar.txt"
Reverted 'trunk\foo@bar.txt'

什么操作系统? 如果是* nix系统,请尝试用“ single @ quotes”引用文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM