Как удалить все мои изменения в рабочем каталоге SVN?

У меня есть рабочий каталог SVN. Я внес некоторые изменения в этот каталог, и он показывает в svn status. Но есть ли способ для меня удалить все мои изменения там и просто получить все из магистрали с помощью командной строки?

Ответ 1

svn revert -R .
svn up

Это будет рекурсивно возвращать текущий каталог и все под ним, а затем обновляться до последней версии.

Ответ 2

Я использовал комбинацию ответов других людей, чтобы придумать это решение:

Отменить нормальные локальные изменения SVN

svn revert -R .

Удалите любые другие изменения и поддерживайте удаление файлов/папок с пробелами и т.д.

svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf

Не забудьте получить последние файлы из SVN

svn update --force

Ответ 3

Если у вас нет изменений, вы всегда можете быть очень основательными и/или ленивыми и делать...

rm -rf *
svn update

Но, действительно, не делайте не, если вы действительно уверены, что опция nuke-from-space - это то, что вы хотите! Это имеет то преимущество, что вы также запускаете все сбои, временные файлы и вещи, которые SVN игнорирует.

Более правильным решением является использование команды revert:

svn revert -R .

-R вызывает подрывную функцию для рекурсии и возврата всего в рабочий каталог и под ним.

Ответ 4

Ни один из ответов здесь не был тем, чего я хотел. Вот что я придумал:

# 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' вместо пробелов.

Преимущество вышеприведенной команды в том, что она не требует какой-либо сетевой активности для reset песочницы. Вы получите именно то, что у вас было раньше, и вы потеряете все свои изменения. (отказ от ответственности перед тем, как кто-то обвинит меня в том, что этот код разрушает их работу); -)

Я использую этот script в непрерывной системе интеграции, где хочу убедиться, что чистая сборка выполняется после выполнения некоторых тестов.

Изменить. Я не уверен, что это работает со всеми версиями Subversion. Не ясно, если команда svn status всегда форматируется последовательно. Используйте на свой страх и риск, как и для любой команды, использующей такую ​​команду rm.

Ответ 5

svn revert отменяет внесенные вами локальные изменения.

Ответ 6

Вы можете использовать следующую команду для восстановления всех локальных изменений:

svn st -q | awk '{print $2;}' | xargs svn revert

Ответ 7

svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

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

Ответ 9

svn revert -R .
svn cleanup . --remove-unversioned

Ответ 10

Если вы находитесь в окнах, следующий цикл for вернет все незафиксированные изменения, сделанные в вашем рабочем пространстве:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)

Если вы хотите удалить все незафиксированные изменения и все неверсированные объекты, для этого потребуется 2 цикла:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
  svn rm --force "%%e"
)