Как я могу удалить все свои изменения в моем рабочем каталоге SVN? - PullRequest
182 голосов
/ 06 августа 2009

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

Ответы [ 10 ]

257 голосов
/ 06 августа 2009
svn revert -R .
svn up

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

83 голосов
/ 28 апреля 2012

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

Вернуть нормальные локальные изменения 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
20 голосов
/ 11 декабря 2017
svn revert -R .
svn cleanup . --remove-unversioned
13 голосов
/ 06 августа 2009

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

rm -rf *
svn update

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

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

svn revert -R .

-R приводит к тому, что subversion рекурсирует и восстанавливает все в текущем рабочем каталоге и под ним.

9 голосов
/ 17 августа 2011

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

# 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.

7 голосов
/ 06 августа 2009

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

5 голосов
/ 22 августа 2013

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

svn st -q | awk '{print $2;}' | xargs svn revert
4 голосов
/ 06 августа 2009
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

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

1 голос
/ 06 августа 2009
0 голосов
/ 30 октября 2017

Если вы находитесь в 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"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...