Tôi hiện đang viết một tập lệnh trong Powershell cho phép sao chép một thư mục trong kho SVN sang kho khác trong khi vẫn giữ lại lịch sử. Ví dụ về lệnh như vậy là:Đường ống Powershell gây ra việc sử dụng bộ nhớ bùng nổ
svnadmin.exe dump $FromRepoPath `
| svndumpfilter.exe include --drop-empty-revs --renumber-revs --preserve-revprops $Folder `
| svnadmin.exe load --ignore-uuid $ToRepoPath
Điều này gây ra việc sử dụng bộ nhớ rất cao trong Powershell. Nó xuất hiện rằng Powershell đầu tiên thực hiện svnadmin.exe và bộ đệm stdout từ SVN admin, sau đó thực hiện svndumpfilter và bộ đệm mà đầu ra và cuối cùng thực hiện svnadmin.exe.
tôi có thể làm việc xung quanh nó bằng cách tạo ra một tập tin thực thi riêng biệt:
@echo off
svnadmin.exe dump %1 | svndumpfilter.exe include --drop-empty-revs --renumber-revs --preserve-revprops %2 | svnadmin.exe load --ignore-uuid %3
Và sau đó gọi nó từ Powershell:
cmd.exe /c "SvnHelper.cmd $FromRepoPath $Folder $ToRepoPath"
Nhưng điều này cảm thấy như một cách giải quyết khó chịu và không cần thiết.
Có cách nào để yêu cầu Powershell truyền trực tiếp khi đường ống thay vì đệm không?
Hãy thử 'svnadmin.exe ... | out-string | svnfilter.exe ... '? Điều này có thể thuyết phục powershell để ống mỗi dòng thay vì thu thập tất cả mọi thứ. Tôi không có SVN cũng không biết, vì vậy xin lỗi nếu điều này phá vỡ khủng khiếp. – Eris