我们有一个脚本可以从Subversion工作副本中的所有文件夹中删除svn:mergeinfo属性,但不能删除工作副本根目录本身。它目前是通过单独的批处理文件调用的NAnt构建脚本,所以我试图用更简单的PowerShell脚本替换它。我有三次尝试,从天真到稍微复杂。这三个都不符合我的标准,输出行property 'svn:mergeinfo' deleted from '.'.
检查工作副本root的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 $_
有关我的逻辑缺陷在哪里的任何想法?
答案 0 :(得分:3)
svn
是一个外部应用程序,您无法直接使用PowerShell管道技术。我不熟悉svn
语法,但对于细节可能有误,但所有命令都应该使用ForEach-Object
(%)。那就是:
... | %{ svn propdel svn:mergeinfo -R $_ }
然后svn
应正确“理解”$_
。此外,您很可能应该使用$_.FullName
或$_.Name
而不是$_
之类的内容(同样,因为svn
是一个外部应用程序而且它需要一个字符串(例如$_.FullName
/ $_.Name
),而非对象$_
)。注意:$_
通常会按预期自动转换为字符串,但情况并非总是如此。