У меня есть рабочий каталог SVN. Я внес некоторые изменения в этот каталог, и он показывает в svn status
. Но есть ли способ для меня удалить все мои изменения там и просто получить все из магистрали с помощью командной строки?
Как удалить все мои изменения в рабочем каталоге SVN?
Ответ 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
Удалит файл, который был изменен. Кажется, я помню, что у меня были проблемы с возвратом, когда файлы и каталоги могли быть добавлены.
Ответ 8
Ответ 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"
)