【发布时间】:2015-02-10 23:52:05
【问题描述】:
我目前正在 Powershell 中编写一个脚本,该脚本允许将 SVN 存储库中的文件夹复制到另一个存储库,同时保留历史记录。此类命令的一个示例是:
svnadmin.exe dump $FromRepoPath `
| svndumpfilter.exe include --drop-empty-revs --renumber-revs --preserve-revprops $Folder `
| svnadmin.exe load --ignore-uuid $ToRepoPath
这会导致 Powershell 中的内存使用率非常高。看来Powershell首先执行svnadmin.exe并缓冲来自SVN admin的stdout,然后执行svndumpfilter并缓冲输出,最后执行svnadmin.exe。
我可以通过创建一个单独的批处理文件来解决它:
@echo off
svnadmin.exe dump %1 | svndumpfilter.exe include --drop-empty-revs --renumber-revs --preserve-revprops %2 | svnadmin.exe load --ignore-uuid %3
然后从 Powershell 调用它:
cmd.exe /c "SvnHelper.cmd $FromRepoPath $Folder $ToRepoPath"
但这感觉像是一种令人讨厌且不必要的解决方法。
有没有办法告诉Powershell在管道时直接传递而不是缓冲它?
【问题讨论】:
-
试试
svnadmin.exe ... | out-string | svnfilter.exe ...?这可能会说服 powershell 对每一行进行管道传输,而不是收集所有内容。我没有 SVN 也不知道,如果这严重破坏了,请道歉。
标签: powershell batch-file