Очистить svn checkout (удалить файлы не svn) - PullRequest
11 голосов
/ 23 декабря 2010

Я хочу удалить все файлы в моей рабочей копии, которые не известны в хранилище svn.

По сути, как будто я только что сделал чистую проверку, но мне бы не пришлось повторно скачивать все файлы.

Самое близкое, что я пришел к этому, это ...

rm -rf `svn st | grep "^?" | cut -d" " -f8`

Но это кажется неуклюжим, и я не совсем верю в это, так как несогласованность в выводе может удалить каталоги вне svn.

"svn export" - это не то, что я ищу, потому что я не очищаю исходный код, чтобы упаковать его, я просто хочу в основном удалить cruft (* .pyc, * .orig, * .rej, svn-commit. tmp, * .swp).

Есть ли лучший способ сделать это помимо чистой проверки?

Ответы [ 5 ]

19 голосов
/ 30 июня 2011

Большинство опубликованных здесь решений не обрабатывают папки с пробелами. Вот почему мы используем это:

svn status --no-ignore | grep '^[?I]' |  sed "s/^[?I] //" | xargs -I{} rm -rf "{}"
5 голосов
/ 23 декабря 2010

http://www.cuberick.com/2008/11/clean-up-your-subversion-working-copy.html

Вот что я делаю, когда хочу, чтобы моя рабочая копия была идентична репо:

 svn st | awk '{print $2}' | xargs rm -rf

Это будетудалите все файлы, которые не синхронизированы с хранилищем.Затем просто обновитесь, чтобы восстановить удаленные объекты и получить актуальную информацию.

svn up

... Убедитесь, что у вас нет правок или изменений!Более безопасная команда может быть:

svn st | grep '?' | awk '{print $2}' |xargs rm -f

... Как насчет игнорируемых файлов?Например,

svn st --no-ignore
svn st --no-ignore | awk '{print $2}' | xargs rm -rf
svn st --no-ignore | grep '?' | awk '{print $2}' |xargs rm -f
3 голосов
/ 06 января 2011
svn status --no-ignore | grep '^[?I]' | awk '{print $2}' | xargs rm -rf

Позвольте мне объяснить.

Получить состояние файлов в репозитории и распечатать их один за другим на стандартный вывод в массив

svn status

Это включает в себя файлыобычно игнорируется svn

--no-ignore

Строки соответствия, содержащие либо?или я как статус.Я имею ввиду проигнорированный файл а?означает, что файл не находится под управлением svn.

| grep '^[?I]'

Это печатает вторую переменную в массиве с именем файла

| awk '{print $2}'

Это удаляет файлы с напечатанными именами файлов

| xargs rm -rf

ура, петля

2 голосов
/ 23 декабря 2010

Используйте это:

svn status --no-ignore | grep ^I | awk '{print $2}' | xargs rm -rf

Получено из commandlinefu .

0 голосов
/ 23 декабря 2010

Удалить каждый файл, который не имеет атрибута readonly?Убедитесь, что вы не проверили вещи заранее ...

...