Подтвердить что ты не робот

Как удалить все удаленные файлы из репозитория?

У меня есть script, в котором я добавляю все новые файлы, прежде чем переносить свою рабочую копию в мой репозиторий с помощью этой строки:

svn status | grep ^\? | awk '{print $2}' | xargs svn add

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

svn status | grep ^\! | awk '{print $2}' | xargs svn --force delete

Как вы можете видеть, я заменил

"?" с "!" и

"add" с "--force delete"

Не могли бы вы рассказать мне, почему это не работает?

пс. Я знаю, что это рискованная процедура. Я уже обсуждал все это. спасибо

спасибо

4b9b3361

Ответ 1

Я просто попробовал это, и он отлично работает.

$ svn st | grep '^!' | awk '{print $2}' | xargs svn delete --force
D         groups.pl
D         textblock.pl

Имеются ли в ваших файлах пробелы в именах?

ПОДОЖДИТЕ ВТОРОЙ!! Я вижу проблему. У вас есть:

svn --force delete

и не:

svn delete --force

--force является параметром команды delete, а не командой svn.

Ответ 3

svn status | grep '^!' | sed 's/! *//' | xargs -d '\n' svn delete --force

Решение работает для имен файлов с пробелами и специальными символами.

  • svn status - перечислены все изменения, удаленные файлы отмечены как !
  • grep '^!' - извлекает строки, начинающиеся с ! (т.е. удаленные файлы)
  • sed 's/! *//' - удаляет ! - char в начале и пробелы после него
  • xargs -d '\n' - обрабатывает каждую строку ввода (включая пробелы и специальные символы) как отдельный аргумент и передает их в svn delete --force

Ответ 4

а как насчет добавления вы можете просто использовать

svn add --force .

или

svn --force add .

он будет делать то же самое: добавьте все неверсированные файлы, кроме тех, которые соответствуют svn: ignore patterns

Ответ 5

подход с использованием perl oneliner будет:

svn st | perl -ne 'print "$1\n" if /^\!\s+(.*)/' | xargs svn rm

это также должно работать с символами пробела в именах файлов.

edit: улучшенное регулярное выражение