我们有一个脚本可以从 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 管道技术。我不熟悉 svn
语法,可能在细节上有误,但你的所有命令大概都应该使用 ForEach-Object
(%)。即:
... | %{ svn propdel svn:mergeinfo -R $_ }
然后 svn
应该正确地“理解”$_
。此外,您很可能应该使用 $_.FullName
或 $_.Name
而不是 $_
(同样,因为svn
是一个外部应用程序,它需要一个字符串(例如 $_.FullName
/$_.Name
),而不是对象 $_
).注意:$_
通常会按预期自动转换为字符串,但情况并非总是如此。
关于svn - 为什么这个 PowerShell 脚本删除 svn :mergeinfo from the root directory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041960/