Я обнаружил, что в таких случаях гораздо проще просто удалить рабочую копию и повторно оформить заказ. Если у вас есть локальные изменения, сначала скопируйте измененные файлы в другое место.
Но Ответ Can может работать в вашем случае, если только у SVN нет больших проблем. Хотя вам, вероятно, придется запускать его несколько раз, так как он будет начинаться с корневой папки, которая все равно будет иметь проблемы. В этом случае вам понадобится какой-то обход после заказа, который нельзя сделать с помощью for /r
, но который может гарантировать, что вы начнете с самых низких каталогов в иерархии для очистки.
Вам также необходимо исключить каталоги хранения состояния SVN .svn:
for /r /d %i in (*) do if NOT %i==.svn svn cleanup %i
Что касается прохождения после заказа, вы можете создать небольшую партию:
@echo off
call :recurse "."
goto :eof
:recurse
pushd %1
if not %~1==.svn (
for /d %%i in (*) do call :recurse "%%i"
echo svn cleanup %~1
)
popd
goto :eof
На следующем дереве:
a
├───.svn
├───a1
│ └───.svn
└───a2
└───.svn
b
├───.svn
├───b1
│ ├───.svn
│ ├───b11
│ │ └───.svn
│ └───b12
│ └───.svn
└───b2
Это дает следующий вывод:
svn cleanup "a1"
svn cleanup "a2"
svn cleanup "a"
svn cleanup "b11"
svn cleanup "b12"
svn cleanup "b1"
svn cleanup "b2"
svn cleanup "b"
svn cleanup "."
, который, как вы видите, гарантирует, что сначала обрабатываются самые низкие каталоги, а каталоги .svn пропускаются. Удалите echo
, если вы хотите его использовать. Это может решить вашу проблему. Может быть.