Использование powershell и svn для удаления неверсированных файлов - PullRequest
3 голосов
/ 31 января 2012

Я пытаюсь написать скрипт сборки для извлечения кода с помощью Powershell. Мне нужно иметь возможность заменить любые изменения, внесенные в рабочую копию, соответствующими изменениями из репозитория SVN. Это также включает удаление любых файлов, которые были удалены в репо, но не удалены в рабочей копии.

К сожалению, я не могу выполнить чистую проверку, поскольку было бы неэффективно извлекать все 10 ГБ кода каждый раз при запуске сценария сборки. Как бы я это сделал?

Я пытался что-то вроде этого:

&$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 ]

6 голосов
/ 31 января 2012

Если вы хотите удалить неотслеживаемые и игнорируемые файлы из вашего рабочего каталога, попробуйте что-то вроде этого:

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

Удалите -whatif, как только вы подтвердите, что он делает то, что вы хотите, чтобы он делал.

0 голосов
/ 07 января 2019

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

Пожалуйста, обратитесь Источник

0 голосов
/ 31 января 2012

Я использовал следующее:

&$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...