Очистите svn checkout (удалите файлы, отличные от SVN)

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

Эффективно, как будто я просто сделал чистую проверку, но Id скорее не придется перезагружать все файлы.

Ближайший думаю, что я пришел к этому...

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

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

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

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

Ответ 1

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

svn status --no-ignore | grep '^[?I]' |  sed "s/^[?I] //" | xargs -I{} rm -rf "{}"

Ответ 2

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

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

Cheers, Loop

Ответ 4

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

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

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

Ответ 5

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