【问题标题】:Why Subversion skips files which contain the @ symbol?为什么 Subversion 会跳过包含 @ 符号的文件?
【发布时间】:2010-12-31 09:49:03
【问题描述】:

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

svn revert "build\myfile@test.meta"

SVN 跳过此文件并输出:

Skipped 'build\myfile'

我试过了:

svn revert "build\*.meta"

但它给出了相同的结果。

我可以从 GUI 恢复这些文件。我可以通过这样做来恢复这些文件(但它恢复的比我想要的多):

svn revert --recursive "build"

有解决办法吗?

【问题讨论】:

    标签: file svn special-characters revert


    【解决方案1】:

    Subversion 中文件名中的@ 符号实际上有一个特殊的含义——一个固定的修订号。引用Subversion book

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

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

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

    【讨论】:

    • 使用下面的 bhavinb 脚本对目录中的每个文件执行此操作。很棒的剧本,很棒的答案 Avi。
    • 谢谢!我快疯了。
    • 这是 iPhone 编程的一个问题,因为图像的标准命名约定是 myimage@2x.png,但这种解决方法很有效。谢谢!
    【解决方案2】:

    只是为了添加到上面的正确答案,如果您有很多名称中带有“@”符号的文件要批量处理(即使用 * 通配符),您可以在操作系统中执行类似的操作X 终端(或任何 Linux 机器):

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

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

    希望这会有所帮助 - 我不得不费力地添加我的应用程序升级到 iOS4.0 所需的大量 @2x.png 文件

    【讨论】:

    • 这是救命稻草。我实际上将它与 svn stat | grep "^?" | awk '{打印 $2}' | xargs svn 添加到做 svn stat | grep "^?" | awk '{打印 $2}' | xargs -I % svn 添加 %@
    【解决方案3】:

    刚刚使用 cmd.exe shell 在 Windows 上对其进行了正确测试 - 用双引号将名称括起来:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 这是窗户。单引号不起作用 - 你会得到这样的输出: Skipped ''build'' (i.e. double single quotes)
      • @Paulius:知道你原来问题中的操作系统会很有用。
      • 另外,单引号技巧在 nix 上无论如何都不起作用
      • @Purrell,请注意,我认为 shell 解析命令行时存在问题。
      猜你喜欢
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2020-05-27
      相关资源
      最近更新 更多