Есть ли команда 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/...)