Как удалить все удаленные файлы из хранилища? - PullRequest
47 голосов
/ 05 января 2011

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

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

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

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

Как видите, я заменил

"?" с "!" и

"add" с "--force delete"

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

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

спасибо

Ответы [ 5 ]

61 голосов
/ 06 января 2011

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

$ 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.

41 голосов
/ 26 июня 2012

Я тоже нашел другое решение.

svn status | grep '^\!' | sed 's/! *//' | xargs -I% svn rm %

Я видел его на http://donunix.blogspot.de/2009/02/svn-remove-all-deleted-files.html

7 голосов
/ 15 октября 2015
svn status | grep '^!' | sed 's/! *//' | xargs -d '\n' svn delete --force

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

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

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

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

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

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

2 голосов
/ 07 июля 2011

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

svn add --force .

или

svn --force add .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...