Ответ 1
Использование TortoiseSVN:
- щелкните правой кнопкой мыши папку рабочей копии, удерживая клавишу shift вниз
- выберите "удалить неверсированные элементы"
Если у меня есть рабочая копия репозитория Subversion, есть ли способ удалить все неверсированные или проигнорированные файлы в этой рабочей копии с помощью одной команды или инструмента? По сути, я ищу аналог SVN git clean
.
Возможно, будет приемлема либо командная строка, либо графическое решение (для TortoiseSVN).
Использование TortoiseSVN:
svn status --no-ignore | grep '^[I?]' | cut -c 9- | while IFS= read -r f; do rm -rf "$f"; done
Это имеет следующие функции:
--xml
и проанализировать полученный результат xml)svn status
печатает другие символы состояния перед именем файла (чего не должно быть, потому что файлы не отслеживаются, но на всякий случай...)Я использую оболочку script с именем svnclean
, которая содержит следующее:
#!/bin/sh
# make sure this script exits with a non-zero return value if the
# current directory is not in a svn working directory
svn info >/dev/null || exit 1
svn status --no-ignore | grep '^[I?]' | cut -c 9- |
# setting IFS to the empty string ensures that any leading or
# trailing whitespace is not trimmed from the filename
while IFS= read -r f; do
# tell the user which file is being deleted. use printf
# instead of echo because different implementations of echo do
# different things if the arguments begin with hyphens or
# contain backslashes; the behavior of printf is consistent
printf '%s\n' "Deleting ${f}..."
# if rm -rf can't delete the file, something is wrong so bail
rm -rf "${f}" || exit 1
done
Я знаю, что это старо, но в случае, если кто-то на него натыкается, более новые версии (1.9 или новее) поддержки svn --remove-unversioned
, например. svn cleanup . --remove-unversioned
.
https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
Этот oneliner может вам помочь:
$ svn status | grep '^?' | awk '{print $2}' | xargs rm -rf
Используйте с осторожностью!
Изменение ответов Yanal-Yves Fargialla и gimpf с использованием Powershell (но не разрешено комментировать исходный пост Stackoverflow):
powershell -Command "&{(svn status --no-ignore) -match '^[\?i]' -replace '^.\s+' | rm -recurse -force}
Это добавляет карат ( "^" ), чтобы указать начало строки, избегая сопоставления всех файлов, содержащих букву "i". Также добавьте флаги для -recurse и -force в rm, чтобы сделать эту команду неинтерактивной и поэтому можно использовать в script.
Многие вещи в SVN могут выполняться по-разному, о чем свидетельствуют разнообразные ответы командной строки, приведенные здесь. С появлением версии 1.7 существует еще один способ для TortoiseSVN, который, по сути, обеспечивает более точное зернистое разрешение, чем предоставленный ответ Stefan, позволяя вам выбирать не-версионные файлы отдельно от игнорируемых файлов. Просто выберите TortoiseSvn >> Clean up...
, чтобы открыть это диалоговое окно.
С powershell:
(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm
Из командной строки:
powershell -Command "&{(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm}"
Использование TortoiseSVN:
Не очень хорошее и чистое решение, но самый быстрый способ, который я знаю (в Windows).
Благодаря pkh для чата с игнорируемыми файлами.
Этот oneliner работает для меня (на основе ответа Ричарда Хансена, который неожиданно не работал для файлов, содержащих пробелы):
svn status --no-ignore | grep '^[I?]' | cut -c 9- | xargs -d"\n" -I{} rm {}
Это похоже на другие ответы, но фактически получает проигнорированные файлы (обратите внимание на "I" в RE):
rm -rf `svn status --no-ignore | grep '^[\?I]' | sed 's/^[\?I]//'`
Кто-то сказал, что вы не можете сделать это из командной строки Windows.
Bull.
for /f "tokens=2 delims= " %I IN ('svn st --no-ignore ^| findstr /R "^[I?]"') DO (DEL /S /F /Q /A:H "%I" & rmdir /S /Q "%I")
Он работает в одной строке и не требует единого инструмента GNU.:)
вы не можете удалить их только с помощью командной строки SVN (хотя не уверены в инструментах графического интерфейса), если вы находитесь под Linux-системой, это может помочь:
http://www.guyrutenberg.com/2008/01/18/delete-unversioned-files-under-svn/
Другим (жестоким) методом является фиксация изменений, удаление всех из папки и проверка снова.