Ни один из ответов здесь не был таким, как я хотел. Вот что я придумал:
# Recursively revert any locally-changed files
svn revert -R .
# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
tr '\n' '\0' | xargs -0 rm -rf
Проверено на Linux; может работать в Cygwin, но опирается (я полагаю) на специфичное для GNU расширение, которое позволяет xargs разделяться на основе '\0'
вместо пробелов.
Преимущество вышеупомянутой команды в том, что она не требует какой-либо сетевой активности для сброса песочницы. Вы получаете именно то, что имели раньше, и теряете все свои изменения . (отказ от ответственности перед тем, как кто-то обвиняет меня в том, что этот код разрушает их работу); -)
Я использую этот сценарий в системе непрерывной интеграции, в которой я хочу убедиться, что после выполнения некоторых тестов выполняется чистая сборка.
Редактировать : Я не уверен, что это работает со всеми версиями Subversion. Непонятно, всегда ли команда svn status
форматируется последовательно. Используйте на свой страх и риск, как и для любой команды, которая использует такую общую команду rm
.