Удалить «удаленные» файлы из локального хранилища - PullRequest
3 голосов
/ 30 января 2012

Как удалить файлы, которые были удалены из репо, но еще не были удалены локально?

По сути, я пишу скрипт сборки в powershell, который должен получать самые последние изменения из репозитория и извлечения, но могут быть файлы, которые были удалены из репо, которые еще не был удален из моей локальной проверки. Я имею в виду, что одним из решений является просто удалить все и сделать чистую проверку, но это довольно дорого и займет много времени. Я также мог бы сделать статус SVN и искать что-нибудь с "D" и удалять их локально, но это довольно утомительно. Я также хотел бы просто перезаписать любые конфликты и - принудительно оформить заказ на файлы, которые необходимо объединить.

Есть ли какая-то простая команда, например, revert или checkout switch, которую я пропускаю?


** Редактировать: На самом деле мне нужно обработать два разных случая:

Часть A) В одном разделе мне нужно оставить что-либо измененное в рабочей копии в одиночку и просто извлечь изменения, которые не являются конфликтными или объединены. Мне нужно, чтобы это никогда не прерывалось, а это означает, что я просто хочу выбросить все, что имеет проблему, и сохранить рабочую / локальную копию.

Я думал об использовании: svn update --accept mine-full --force ( Примечание : это корневая директория, а не отдельные файлы)

Часть B) В другом разделе я хочу перезаписать любые изменения и удалить файлы, которые были удалены в репо.

Я думал об использовании: svn update --accept theirs-full --force ( Примечание : это корневой каталог, а не отдельные файлы)

Будет ли это работать? Или --force (или --accept) не то, что я хочу использовать?


Моя главная проблема с использованием обновления в том, что оно прервет весь процесс, если возникнет проблема, не так ли? Что делает --force с svn update? Он также не удаляет неверсионные элементы.

Возврат не совсем то, что мне нужно, не так ли? Он не удаляет ни один из моих неверсированных элементов.

Кроме того, разве checkout не делает то же самое, что обновление, если уже есть локальные файлы? Было бы гораздо проще использовать checkout в случае, когда ничего еще не существует. Проблема в том, что я не могу указать параметр --accept с svn checkout. Я полагаю, я мог бы проверить, существует ли папка, а затем сделать проверку или обновление соответственно.

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Для части А я использовал:

svn update --accept mine-full --force

Для части B я только что сделал:

Шаг 1:

svn revert $localPath

Шаг 2:

svn update $localPath

Шаг 3 (с использованием powershell + svn status, но это можно сделать с помощью команды rm -rf grep / sed в * nix):

svn status $localPath --no-ignore |
                Select-String '^[?I]' |
                ForEach-Object {
                    [Regex]::Match($_.Line, '^[^\s]*\s+(.*)$').Groups[1].Value
                } |
                Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
0 голосов
/ 30 января 2012

Если вы удалите файл вручную, он будет восстанавливаться до тех пор, пока вы не обновите свой локальный репозиторий до той же версии, в которой отсутствует файл в репозитории. Итак, первый шаг - попытаться обновить ваш репозиторий.

svn update

Есть несколько предостережений. Во-первых, если кто-то удалил файл, но не проверял его удаление, удаление на самом деле отсутствует в удаленном хранилище. Во-вторых, если вы изменили файл, вы могли бы получить конфликт, так как удаленный файл в хранилище - это не тот же удаленный файл на вашем диске.

Предполагая, что существуют какие-то конфликты, которые затрудняют обновление. Вы должны попробовать

svn revert <problem file name>

И повторите попытку обновления.

Использование опции --force без отличной картины происходящего - почти всегда плохая идея. По сути, это как не слушать советы экспертов. Если у вас больше опыта, чем у консультанта, вы должны знать о предостережениях и болевых точках, которых следует избегать. Если у вас нет большего опыта, чем у консультанта, вы навредите себе. --force - это не флаг «попробуй еще раз, игнорируя предупреждения», это опция «делай это в любом случае, даже если это напортачит».

...