Как удалить все удаленные файлы из репозитория?
У меня есть script, в котором я добавляю все новые файлы, прежде чем переносить свою рабочую копию в мой репозиторий с помощью этой строки:
svn status | grep ^\? | awk '{print $2}' | xargs svn add
Теперь я хочу добавить строку, которая удаляет из репозитория все удаленные файлы в моей рабочей копии. Другими словами, я не могу указать их один за другим, и мне нужно обнаружить их со статусом svn, а затем автоматически удалить их. Однако строка не работает.
svn status | grep ^\! | awk '{print $2}' | xargs svn --force delete
Как вы можете видеть, я заменил
"?
" с "!
" и
"add
" с "--force delete
"
Не могли бы вы рассказать мне, почему это не работает?
пс. Я знаю, что это рискованная процедура. Я уже обсуждал все это.
спасибо
спасибо
Ответы
Ответ 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
.
Ответ 2
Я нашел и другое решение.
svn status | grep '^\!' | sed 's/! *//' | xargs -I% svn rm %
Я видел его на http://donunix.blogspot.de/2009/02/svn-remove-all-deleted-files.html
Ответ 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: улучшенное регулярное выражение