2012-01-31 11 views
2

Powershellを使用してチェックアウトコードにビルドスクリプトを書き込もうとしています。 SVNリポジトリから適切な変更を行って作業コピーに加えられた変更を置き換えることができる必要があります。これには、リポジトリで削除されたものの、作業コピーでは削除されなかったファイルの削除も含まれます。バージョン管理されていないファイルを削除するためにpowershellとsvnを使用する

残念ながら、ビルドスクリプトが実行されるたびに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 

私は$ xにライン#3の出力を保存するように見えることはできません、それの残りの部分がある場合、私は非常にわからないんだけどそれを行う方法。

これが適切な方法であるかどうかはわかりませんが、そうであれば、私はSVNステータスからの出力を保存して解析することができません。

誰にも提案はありますか?ありがとう!

答えて

4

あなたの作業ディレクトリから人跡未踏と無視されたファイルを削除したい場合は、このような何かを試してみてください。

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

あなたがいることを確認した後-whatifを削除しますそれはあなたがしたいことをしています。

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 
関連する問題