У меня есть рабочий каталог SVN. Я сделал некоторые изменения в этом каталоге, и он показывает в svn status
. Но есть ли для меня способ удалить все мои изменения и просто получить все из транка с помощью командной строки?
У меня есть рабочий каталог SVN. Я сделал некоторые изменения в этом каталоге, и он показывает в svn status
. Но есть ли для меня способ удалить все мои изменения и просто получить все из транка с помощью командной строки?
Ответы:
svn revert -R .
svn up
Это рекурсивно вернет текущий каталог и все, что в нем, а затем обновится до последней версии.
Я использовал комбинацию ответов других людей, чтобы придумать это решение:
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
svn revert -R .
svn cleanup . --remove-unversioned
svn cleanup . --remove-ignored
Если у вас нет изменений, вы всегда можете быть очень тщательным и / или ленивым и делать ...
rm -rf *
svn update
Но, нет, на самом деле, не делайте этого, если вы действительно не уверены, что вариант с ядерным оружием - это то, что вам нужно !! Это имеет преимущество в том, что он удаляет все сборки, временные файлы и вещи, которые SVN игнорирует.
Более правильное решение - использовать команду revert:
svn revert -R .
-R заставляет subversion возвращать и возвращать все в текущем рабочем каталоге и ниже.
svn nuke-from-space
Ни один из ответов здесь не был таким, как я хотел. Вот что я придумал:
# 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
команду.
Если вы находитесь в 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"
)