Есть ли в SVN команда, которую я могу использовать для удаления всех локально отсутствующих файлов в каталоге?
Или, в противном случае, какой-то способ перечислить только те файлы, которые отсутствуют (или, в более общем случае, имеют статус A, D,? И т. Д.)
Ответы:
Если вы используете TortoiseSVN, просто выполните проверку на наличие изменений , отсортируйте по столбцу « Состояние» , выберите все отмеченные записи
missing
, щелкните правой кнопкой мыши, чтобы открыть контекстное меню, и выберите « Удалить» . Наконец, зафиксируйте публикацию изменений в репозитории.Если вы работаете в Windows, но предпочитаете командную строку и любите возиться с PowerShell, этот однострочный файл поможет вам:
Таким образом, отфильтруйте вывод только по тем строкам, в которых показаны отсутствующие файлы (обозначены восклицательным знаком в начале строки), зафиксируйте соответствующее имя файла и выполните операцию
svn rm
для этого имени файла.(Сообщение в блоге Удаление всех «отсутствующих» файлов из рабочей копии SVN делает нечто подобное для Unix / Linux.)
источник
svn up
? потому что файлы восстанавливаются с svn сервераЕсли вы используете Mac ( Дарвин ) или Linux, вы можете направить выходные данные следующих команд
svn rm
для всех отсутствующих файлов. Вы можете установить текущий рабочий каталог в соответствующий каталог или подкаталог перед их запуском - в зависимости от того, хотите ли вы запустить всю эту рабочую копию или только ее подмножество.svn rm
с использованием вывода №3 в качестве аргументовИтак, полная команда:
Ссылки:
источник
awk '{print " --force "$2"@"}'
если ваше имя файла содержит@
(например, если вы разработчик iOS)awk '{$1=""; print " --force \""substr($0,2)"@\"" }'
должно помочь (и начинает выглядеть уродливо)--force
в часть xargs?svn status
svn remove
каждый файлисточник
-r
кxargs
параметрам (не запускать, если не указаны аргументы). Кроме того, количество аргументов должно быть ограничено, а удаления должны быть пакетными, потому что при вызове происходит сбой при удалении очень большого количества файлов, например-n 500
. И последнее, но не менее важное: выполняемое цитирование неоптимально для файлов, содержащих специальные функции оболочки, такие как$
- лучше использовать в\n
качестве разделителя и оставить цитирование наxargs
:svn status | grep "!" | cut -d! -f2 | sed 's/^ *//' | xargs -n 500 -d "\n" -r svn rm
Я только что нашел вот это, что помогает удалить все «отсутствующие» файлы из рабочей копии SVN :
источник
Спасибо Полу Мартину за версию для Windows.
Вот небольшая модификация скрипта, поэтому также учитываются файлы Windows с пробелами. Также
missing.list
файл будет удален в конце.Я сохранил следующее в svndel.bat в моем каталоге bin SVN (установленном в моей среде %% PATH), чтобы его можно было вызвать из любой папки в командной строке.
источник
del missing.list 2>NUL
, потому что я добавил все новые файлы сразу после первого удаления удаленных файлов, поэтому он добавленmissing.list
в svn:svn delete "missing.list"
у меня сработалоМне нравится вариант PowerShell ... Но вот еще один вариант, если вы используете пакетные сценарии Windows:
источник
Альтернатива, которая работает в Linux (bash) для удаляемых файлов, не содержащих пробелов в пути:
источник
Этот сценарий оболочки рекурсивно проверяет (
svn status
) каталоги в вашем проекте, удаляя отсутствующие файлы (как требует вопрос) и добавляет новые файлы в репозиторий. Это своего рода «хранить в репозитории текущий снимок проекта».источник
Небольшая модификация командной строки, которая работает в Mac OS (надеюсь, даже в Linux) и справляется с файлами, которые сообщает команда "svm sr", например "! M" (отсутствует и изменено).
Справляется с пробелами в файлах.
Он основан на модификации предыдущего ответа:
источник
На самом деле возможно полностью удалить
missing.list
из user3689460 и Paul Martinисточник
При работе с большим количеством файлов может случиться так, что аргумент, вводимый в xargs, становится слишком длинным. Я выбрал более наивную реализацию, которая работает и в этом случае.
Это для Linux:
источник
Улучшенная версия
Итак, полная команда:
источник