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


195

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

Ответы:


274
svn revert -R .
svn up

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


2
Обратите внимание, что это не работает с внешними (они, по-видимому, игнорируются).
Cic

86

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

Вернуть нормальные локальные изменения 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

Большое спасибо, Shaize, это самый элегантный сед, ... труба, которую я до сих пор видел для этого :) Особенно заботясь о игнорировании также.
хулиган

Работает как шарм. Спасибо!
Ниило Кейнянен

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

Он не удаляет файлы * .class и т. Д.
Трисмегистос

2
если вы также хотите удалить проигнорированные файлыsvn cleanup . --remove-ignored
Kip

14

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

rm -rf *
svn update

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

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

svn revert -R .

-R заставляет subversion возвращать и возвращать все в текущем рабочем каталоге и ниже.


Я часто использовал этот трюк, но в SVN 1.7, где метаданные хранятся только в корне WC, это уже не является чистым решением. Например, удаленные файлы остаются удаленными.
Барт ван Хейкелом

8
svn nuke-from-space
Джейсон Светт

9

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

# 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команду.



5

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

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

Я получаю сообщение об ошибке «Недостаточно аргументов» для SVN Revert
циркуляр

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

svn update

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



0

Если вы находитесь в Windows, следующий цикл 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"
)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.