Есть ли команда Subversion для reset рабочей копии?

Есть ли одна команда Subversion, которая будет "reset" рабочей копии точно в состоянии, которое хранится в репозитории? Что-то вроде git reset --hard или (ha, hard Git reset не удаляет неверсированные файлы!) rm -rf wc && svn co <url> wc.

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

Ответ 1

Вы можете рекурсивно вернуться так:

svn revert --recursive .

Нет способа (без записи объявления script), чтобы удалить вещи, которые не находятся под контролем источника. Я думаю, что самое близкое, что вы могли бы сделать, это перебрать все файлы, использовать grep результат svn list, а если grep не удался, а затем удалить его.

ИЗМЕНИТЬ: Решение для творческого script находится здесь: Автоматически удалять файлы без преобразования без конверсий

Итак, вы можете создать script, который сочетает в себе revert с тем, какой ответ в связанном вопросе подходит вам лучше всего.

Ответ 2

Чтобы отменить отслеживаемые файлы

svn revert . -R

Чтобы очистить файлы без следа

svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}')

-rf может/должен выглядеть страшно сначала, но как только понял, что это не будет по этим причинам:

  • Только полностью незатребованные каталоги будут соответствовать шаблону, переданному в rm
  • Требуется -rf, иначе эти каталоги не будут удалены

Чтобы вернуться, затем очистите (вопрос OP)

svn revert . -R && svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}')

Для обеспечения удобства использования

Добавьте постоянный псевдоним в ваш .bash_aliases

alias svn.HardReset='read -p "destroy all local changes?[y/N]" && [[ $REPLY =~ ^[yY] ]] && svn revert . -R && rm -rf $(awk -f <(echo "/^?/{print \$2}") <(svn status) ;)'

Ответ 3

Удалите все внутри вашей локальной копии, используя:

rm -r your_local_svn_dir_path/*

И возвратите все рекурсивно, используя приведенную ниже команду.

svn revert -R your_local_svn_dir_path

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

Ответ 4

svn revert . -R

до reset все.

svn revert path/to/file

для одного файла

Ответ 5

Чистое решение Windows cmd/bat:

svn cleanup .
svn revert -R .
For /f "tokens=1,2" %%A in ('svn status --no-ignore') Do (
     If [%%A]==[?] ( Call :UniDelete %%B
     ) Else If [%%A]==[I] Call :UniDelete %%B
   )
svn update .
goto :eof

:UniDelete delete file/dir
IF EXIST "%1\*" (
    RD /S /Q "%1"
) Else (
    If EXIST "%1" DEL /S /F /Q "%1"
)
goto :eof

Ответ 6

Удалить рабочую копию из ОС и проверить ее, простейшая, но, очевидно, не одна команда.

Ответ 7

Очень быстро и просто и делает именно то, что вы хотите

svn status | awk '{if($2 !~ /(config|\.ini)/ && !system("test -e \"" $2 "\"")) {print $2; system("rm -Rf \"" $2 "\"");}}'

/(config|.ini)/для моих целей.

И может быть хорошей идеей добавить --no-ignore в команду svn

Ответ 8

Удалите неверсированные файлы и верните любые изменения:

svn revert D:\tmp\sql -R
svn cleanup D:\tmp\sql --remove-unversioned

Из:

D         D:\tmp\sql\update\abc.txt

Ответ 9

Для удаления невоспроизводимых файлов

Мне удалось перечислить все не проверенные файлы, сообщенные svn st в bash, выполнив:

echo $(svn st | grep -P "^\?" | cut -c 9-)

Если вам повезет, вы можете заменить echo на rm, чтобы удалить ненужные файлы. Или скопируйте файлы, которые вы хотите удалить вручную, если вам повезет меньше.


(я использовал @abe-voelker ответ, чтобы вернуть оставшиеся файлы: fooobar.com/info/42893/...)