使用powershell和svn删除未版本控制的文件

时间:2012-01-31 16:02:03

标签: svn version-control scripting powershell windows-scripting

我正在尝试编写一个构建脚本来使用Powershell检出代码。我需要能够使用SVN repo中的相应更改替换对工作副本所做的任何修改。这还包括删除在回购中删除但未在工作副本中删除的任何文件。

不幸的是,我无法进行干净的结账,因为每次运行构建脚本时检查所有10GB的代码都是低效的。我该怎么做?

我一直在尝试这些方面:

&$SVN_EXE revert $workingPath
&$SVN_EXE update $workingPath
$x = &$SVN_EXE status $localPath --no-ignore |  where {$_ -match "^[\?I]"} | %{$_ -replace "^[\?I]",""} # get the status, get any items with a ? and strip them out
$x | %{$_ -replace "[`n]",", "} # Replace newlines with commas
Remove-Item $x # Remove all the unversioned items

我似乎无法将第3行的输出存储到$ x中,我不太确定其余的是否是这样做的。

我不确定这是否是正确的方法,但如果是,我似乎无法存储和解析SVN状态的输出。

有没有人有任何建议?谢谢!

3 个答案:

答案 0 :(得分:6)

如果要从工作目录中删除未跟踪和忽略的文件,请尝试以下操作:

svn st --no-ignore | %{ if($_ -match '^[?I]\s+(.+)'){ $matches[1]} } | rm -whatif

一旦确认它正在执行您想要的操作,请删除-whatif

答案 1 :(得分:0)

我使用了以下内容:

&$SVN_EXE revert $workingPath
&$SVN_EXE update $workingPath
&$SVN_EXE status $localPath --no-ignore |
                Select-String '^[?I]' |
                ForEach-Object {
                    [Regex]::Match($_.Line, '^[^\s]*\s+(.*)$').Groups[1].Value
                } |
                Remove-Item -Recurse -Force -ErrorAction SilentlyContinue

答案 2 :(得分:0)

cd $ PATH

 svn status --no-ignore | Select-String '^[?I]' | ForEach-Object 
 {[Regex]::Match($_.Line, '^[^\s]*\s+(.*)$').Groups[1].Value} | Remove-Item - 
 Recurse -Force -ErrorAction SilentlyContinue

请参阅Source