【问题标题】:Why is this PowerShell script deleting svn:mergeinfo from the root directory?为什么这个 PowerShell 脚本会从根目录中删除 svn:mergeinfo?
【发布时间】:2010-10-28 10:31:25
【问题描述】:

我们有一个脚本可以从 Subversion 工作副本中的所有文件夹中删除 svn:mergeinfo 属性,但不会删除工作副本根目录本身。它目前是一个通过单独的批处理文件调用的 NAnt 构建脚本,所以我试图用更简单的 PowerShell 脚本替换它。我已经进行了三次尝试,从幼稚到稍微复杂一点。这三个都不符合我的标准,输出property 'svn:mergeinfo' deleted from '.'.

检查工作副本根目录的 SVN 属性表明 svn:mergeinfo 属性确实已从该文件夹中删除,这不是我想要的。每个版本都设计为从工作副本根目录运行。

尝试 1:

# I understand why this one fails, it's a poor attempt.
Get-ChildItem -Recurse | svn propdel svn:mergeinfo -R $_

尝试 2:

# This one correctly lists everything except the working copy root, but
# still removes the svn:mergeinfo property from the working copy root.
Get-ChildItem -Recurse -Exclude $pwd | svn propdel svn:mergeinfo -R $_

尝试 3:

# Again, this one works fine until the svn propdel is added.
Get-ChildItem | ForEach-Object { ls -R $_ } | svn propdel svn:mergeinfo -R $_

对我的逻辑缺陷在哪里有任何想法吗?

【问题讨论】:

    标签: svn powershell


    【解决方案1】:

    svn 是一个外部应用程序,您不能直接使用 PowerShell 管道技术。我不熟悉svn 语法并且可能对细节有误,但您的所有命令大概都应该使用ForEach-Object (%)。那就是:

    ... | %{ svn propdel svn:mergeinfo -R $_ }
    

    那么svn 应该正确地“理解”$_。此外,您很有可能应该使用$_.FullName$_.Name 之类的东西而不是$_(同样,因为svn 是一个外部应用程序,它需要一个字符串(例如$_.FullName/$_.Name) ,而不是对象$_)。注意:$_ 通常会按预期自动转换为字符串,但并非总是如此。

    【讨论】:

    • 很好,谢谢。那我还需要中期吗? foreach 对象 { ls -R %_ }?似乎第二次尝试更好更简洁,可以在此修复程序中正常工作。
    • AFAIK,没有%_ 构造。无论如何,我建议您自己尝试一下。使用cmd 而不是svn... | %{ cmd /c echo $_.FullName } 等,看看你会得到什么。如果svn 可以接受-R 之后的参数列表,那么还有其他解决方案。
    • 错字,对不起;我的意思是$_。感谢您的提示。
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多