Кто-нибудь знает способ рекурсивно удалить все файлы в рабочей копии, которые не находятся под контролем версий? (Мне это нужно, чтобы получить более надежные результаты при автоматической сборке VMware.)
svn
build-automation
Стефан Шульце
источник
источник
hg purge --all
в Mercurial.Ответы:
Редактировать:
В Subversion 1.9.0 появилась возможность сделать это:
До этого я использую этот скрипт на Python для этого:
Кажется, он неплохо справляется со своей задачей.
источник
svn cleanup --remove-unversioned
лучше. И это для Subversion 1.9.0 (эта версия от 2015 года). Он стабилен и стандартен.это работает для меня в bash:
У Сета Рино лучше:
Он обрабатывает неверсированные папки и пробелы в именах файлов.
Согласно комментариям ниже, это работает только с файлами, о которых Subversion не знает (status =?). Все , что подрывная действительно знает о (включая игнорируемые файлы / папки) не будут удалены.
Если вы используете Subversion 1.9 или выше, вы можете просто использовать команду svn cleanup с параметрами --remove-unversioned и --remove-ignored.
источник
svn status | grep "^?" | awk '{print $2}' | xargs -d \\n rm -r
Я наткнулся на эту страницу, пытаясь сделать то же самое, но не для автоматизированной сборки.
Пройдя еще немного, я обнаружил « Расширенное контекстное меню » в TortoiseSVN. Удерживая нажатой клавишу Shift, щелкните правой кнопкой мыши рабочую копию. В меню TortoiseSVN теперь есть дополнительные параметры, включая « Удалить неверсированные элементы ... ».
Хотя, возможно, это не применимо к этому конкретному вопросу (например, в контексте автоматизированной сборки), я подумал, что это может быть полезно для других, желающих сделать то же самое.
источник
Смотрите: svn-clean
источник
Если вы находитесь в командной строке Windows,
Улучшенная версия:
Если вы используете это в пакетном файле, вам необходимо удвоить
%
:источник
Я добавил это в свой профиль Windows PowerShell
источник
--no-ignore
кsvn status
и-Recurse
кRemove-Item
Командная строка Linux:
Или, если некоторые из ваших файлов принадлежат пользователю root:
Это основано на ответе Кена. (Ответ Кена пропускает игнорируемые файлы; мой ответ удаляет их).
источник
Просто сделайте это в unix-shell с помощью:
источник
А нельзя просто экспортировать в новое место и строить оттуда?
источник
Если на вашем пути есть TortoiseSVN и вы находитесь в правильном каталоге:
Параметры описаны в справке TortoiseSVN для
/command:cleanup
:источник
Если вы используете tortoise svn, для этого есть скрытая команда. Удерживая нажатой клавишу Shift, щелкните папку правой кнопкой мыши, чтобы запустить контекстное меню в проводнике Windows. Вы получите команду «Удалить неверсированные элементы».
см. подробности внизу этой страницы или снимок экрана ниже, на котором расширенные функции выделены зелеными звездами, а интересующий - желтым прямоугольником ...
источник
Subversion 1.9.0 представила возможность удаления неверсированных элементов [1]
[1] https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
источник
Мое преобразование сценария Python Томаса Уотнедалса на C #:
источник
Это команда оболочки unix для удаления всех файлов, не находящихся под контролем Subversion.
Ноты:
st
вsvn st
это встроенный псевдоним дляstatus
, т.е. команда эквивалентнаsvn status
--no-ignore
также включает файлы, не являющиеся репозиториями, в вывод состояния, в противном случае игнорирует с помощью таких механизмов, как.cvsignore
и т. д. - поскольку цель состоит в том, чтобы иметь чистую отправную точку для сборок, этот переключатель является обязательнымgrep
фильтры на выходе таким образом, что только те файлы , неизвестным в подрывной осталось - строки , начинающиеся с?
списком файлами неизвестной диверсии , которые были бы проигнорированы без--no-ignore
опцииsed
xargs
команда проинструктирован с помощью-r
не выполнитьrm
, когда список аргументов будет пустым-d '\n'
параметр указываетxargs
использовать символ новой строки в качестве разделителя , например команда также работает для имен файлов с пробеламиrm -r
используется в случае, если необходимо удалить полные каталоги (которые не являются частью репозитория)источник
Я не мог заставить что-либо из вышеперечисленного работать без дополнительных зависимостей, которые я не хотел добавлять в свою автоматизированную систему сборки на win32. Итак, я собрал следующие команды Ant - обратите внимание, что они требуют установки Ant-contrib JAR (я использовал последнюю версию 1.0b3 с Ant 1.7.0).
Обратите внимание, что при этом без предупреждения удаляются все неверсированные файлы.
Для другой папки измените
${basedir}
ссылку.источник
удалите эхо, если вы уверены, что хотите сделать.
источник
/bin/sh
и nrm
процессов.Поскольку все остальные делают это ...
источник
Может также предложить другой вариант
/(Config|.ini)/ предназначен для моих целей.
И было бы неплохо добавить --no-ignore к команде svn
источник
Я наткнулся на svn-clean на своей машине RH5. Он находится в / usr / bin / svn-clean
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean
источник
Чистое решение cmd / bat для windows:
источник
Я пробовал версию Сета Рино из этого ответа, но у меня это не сработало. У меня было 8 символов перед именем файла, а не 9 в
cut -c9-
.Итак, это моя версия
sed
вместоcut
:источник
Если вам нравится Powershell:
Снимите флаг -WhatIf, чтобы команда действительно выполняла удаление. В противном случае он просто выведет то, что он будет делать, если запустить без -WhatIf.
источник
Я бы добавил это как комментарий к ответу Томаса Уотнедала , но пока не могу.
Небольшая проблема с ним (которая не повлияет на Windows) заключается в том, что он проверяет только файлы или каталоги. Для Unix-подобных систем, где могут присутствовать символические ссылки, необходимо изменить строку:
к
также удалить ссылки.
Для меня изменение последней строки
if match: removeall(match.group(1))
начтобы он отображал то, что удаляет, тоже было полезно.
В зависимости от варианта использования,
?[\?ID]
часть регулярного выражения может быть лучше?[\?I]
, так какD
также удаляет удаленные файлы, которые находились под контролем версий. Я хочу использовать это для создания чистой, проверенной папки, поэтому в состоянии не должно быть файловD
.источник
@zhoufei Я проверил ваш ответ и вот обновленная версия:
%
отметки перед буквами G и H.%~1
может использоваться любое имя каталога, я использовал это как функцию в файле bat, так что%~1
это первый входной параметристочник
Если вы не хотите писать какой-либо код, svn2.exe из svn2svn делает это, также есть статья о том, как это реализовано. Удаленные папки и файлы помещаются в корзину.
Запустите «svn2.exe sync [путь]».
источник
Для людей, которым нравится делать это с помощью perl вместо python, оболочки Unix, java и т. Д. Это небольшой скрипт на perl, который также выполняет jib.
Примечание: это также удаляет все неверсированные каталоги
источник
Использование TortoiseSVN: * щелкните правой кнопкой мыши папку с рабочей копией, удерживая нажатой клавишу Shift * выберите «удалить неверсированные элементы»
Как я могу удалить все неверсированные / проигнорированные файлы / папки в моей рабочей копии?
источник
Чистый способ сделать это в PERL:
источник
Я использовал ~ 3 часа, чтобы сгенерировать это. В Unix на это уйдет 5 минут. Основной проблемой были: пробелы в именах папок Win, невозможность редактирования %% i и проблема с определением переменных в цикле Win cmd.
источник
Фрагмент кода C #, приведенный выше, у меня не работал - у меня есть клиент tortoise svn, и строки отформатированы немного по-другому. Вот тот же фрагмент кода, что и выше, только переписанный для работы и с использованием регулярного выражения.
источник