svn - 为什么这个 PowerShell 脚本删除 svn :mergeinfo from the root directory?

标签 svn powershell

我们有一个脚本可以从 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/

相关文章:

powershell - 从哈希表数组的键创建数组

windows - Read-Host 总是以冒号结尾

windows - 如何从 Subversion 存储库中删除意外放置的大文件 (4GB)?

svn - 如何在命令行中从svn删除名称中带有@的文件?

powershell - 在 PowerShell 中处理文件名和文件夹名中的括号

powershell远程

python - Anaconda 提示 "Failed to create temp directory ' C :\temp\conda-<RANDOM>\' " error

git - 为什么 git svn 不能克隆一个裸仓库?

svn - SVN 外部标记流程

svn - 颠覆 : how to interpret diff results?