Вариации этого вопроса задавались ранее, но похоже, что проблема беспокойства других членов команды не упоминалась.В существующих сообщениях (см. Как "развернуть" файл в svn и / или git ) принятым ответом обычно является запуск svn rm FILE
или svn rm --keep-local FILE
, а затем установите свойство svn:ignore
, еслижелательно.Последние 20 минут я потратил на то, чтобы поиграть с этим (проверить репо в двух местах, удалить файл из одного, затем обновить другой и т. Д.).Вот что я нашел (я использую SVN 1.6.16):
Прежде всего, из того, что я могу сказать, флаг --keep-local не влияет на то, что происходит со всеми, кто собираетсяОбновление из хранилища впоследствии.Для них это выглядит так же, как если бы вы только что выполнили обычный svn delete
(ни в одной из документации по subversion, которую я видел, это не упоминается явно - возможно, должно быть очевидно, что вы все еще делаете операцию svn delete
и чтоlocal "будет влиять только на локальную сторону, но это не обязательно было для меня очевидно).
Таким образом, есть два случая - 1. член команды A удаляет файл, в котором член команды B не имел локальных измененийв или 2. член команды A удаляет файл, в котором член команды B сделал незафиксированные локальные изменения в.
В 1, после того, как произойдет удаление, файл B был удален.Теперь он должен восстановить его самостоятельно (т. Е. svn merge -rHEAD:XXX FILE; svn revert FILE
, чтобы вернуть версию XXX файла FILE в рабочий каталог и не повторять его при следующей фиксации)
В 2 B видит деревоКонфликт при обновлении, и FILE теперь имеет статус A + C
с сообщением «локальное редактирование, входящее удаление при обновлении» под ним.На данный момент, я не совсем уверен, что рекомендуемое решение.Я просто скопировал ФАЙЛ куда-то еще, чтобы быть в безопасности, а затем запустил svn revert FILE
.Это оказалось ненужным, потому что FILE все еще существует без изменений в рабочем каталоге с без изменений всех локальных изменений.Но я не знаю, насколько я доверяю этому, потому что мои незафиксированные изменения были стерты svn revert
в других сценариях.
tl; dr : Это неужели тот случай, когда единственный способ отменить версию файла в SVN - это удалить его из рабочего каталога всех остальных членов команды и заставить их самостоятельно его извлечь?Я неправильно использую --keep-local или отсутствует другая аналогичная опция?