为什么此PowerShell脚本要从根目录中删除svn:mergeinfo?
我们有一个脚本可以从Subversion工作副本中的所有文件夹中删除svn:mergeinfo属性,但不能从工作副本根目录本身中删除。它目前是一个通过单独的批处理文件调用的NAnt构建脚本,所以我尝试用一个更简单的PowerShell脚本来替换它。我尝试过三次,从天真到稍微复杂。这三个都不符合我的条件,输出一行为什么此PowerShell脚本要从根目录中删除svn:mergeinfo?,svn,powershell,Svn,Powershell,我们有一个脚本可以从Subversion工作副本中的所有文件夹中删除svn:mergeinfo属性,但不能从工作副本根目录本身中删除。它目前是一个通过单独的批处理文件调用的NAnt构建脚本,所以我尝试用一个更简单的PowerShell脚本来替换它。我尝试过三次,从天真到稍微复杂。这三个都不符合我的条件,输出一行属性“svn:mergeinfo”“deleted from.”。 检查工作副本根目录的SVN属性表明SVN:mergeinfo属性确实已从此文件夹中删除,这不是我想要的。每个版本都设计为
属性“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对象
()。即:
... | %{ svn propdel svn:mergeinfo -R $_ }
然后,
svn
应该正确地“理解”$\uu
。此外,您很可能应该使用类似于$$\uU0.FullName
或$\uName
的内容,而不是$\uCode>(同样,因为svn
是一个外部应用程序,它需要一个字符串(例如$\uU0.FullName
/$\uName
),而不是一个对象$\uCode>)。注意:$\uu
通常会按预期自动转换为字符串,但情况并非总是如此。很好的捕获,谢谢。那么,我还需要期中考试吗?foreach对象{ls-R%}?第二次尝试似乎更好、更简洁,可以正确地使用此修复程序。好吧,没有%\uuu
构造。无论如何,我建议你自己做一点实验。使用cmd
而不是svn
:。|%{cmd/c echo$\ uu.FullName}
等等,看看你能得到什么。如果svn
可以接受-R
之后的参数列表,那么还有其他解决方案;我的意思是$\uu
。谢谢你的提示。