Миграция в SVN, запутанная по поводу удаления старых файлов
У меня есть репозиторий StarTeam, который я пытаюсь перенести в SVN. К сожалению, репозиторий ОГРОМНЫЙ, поэтому я не могу использовать любые сценарии поляриона и т. Д. Я прибегаю к проверке снимков каждого выпуска в StarTeam, а затем добавляю / фиксирую их вручную в SVN.
Тем не менее, я не совсем понимаю, что делать со старыми файлами. В StarTeam нам приходилось перемещать удаленные файлы в "устаревшую" папку, так как команда очистки удаляла все копии файла. Я знаю, что мне не нужно делать это в SVN, но как SVN работает с файлами, которые были удалены / отсутствуют?
Скажем, у меня есть три файла в следующей структуре:
trunk/
Src/
A.cpp
B.cpp
C.cpp
Если из одного выпуска в другой я удалил "C.cpp", нужно ли мне просто зафиксировать весь src, чтобы удаление было отражено в репозитории SVN?
Аналогично, если бы я удалил "C.cpp", но добавил "D.cpp", мне нужно было бы вызвать add для всех "src /" перед фиксацией. Не вызовет ли это проблемы с обнаружением и удалением отсутствующих файлов? Их слишком много, чтобы пройти вручную и удалить каждый в отдельности.
В качестве отдельного вопроса, есть ли причина, по которой tortoiseSVN требуется почти 3 часа, чтобы определить, какие файлы изменены, прежде чем я смогу добавить / зафиксировать? Все, что я вижу, это сообщение "Пожалуйста, подождите..." в диалоговом окне, и оно занимает НАВСЕГДА.
Спасибо!
1 ответ
Любое изменение, которое вы вносите в репо, требует фиксации, так что да после выполнения svn delete
вам нужно svn commit
, Точно так же, когда вы добавляете файлы, это изменение, которое необходимо зафиксировать. В обоих случаях можно отменить добавление и удаление без фиксации.
С точки зрения добавления и удаления файлов в одной транзакции, опять же, которая "просто работает", вы бы эффективно выполнили:
svn delete C.cpp
svn add D.cpp
svn commit
Если вы хотите восстановить удаленный файл, то вы можете просто восстановить файл из более ранней версии репозитория svn, а затем повторить (см. Также Как правильно восстановить удаленный файл из SVN?).
Главное, что вы должны помнить при удалении файлов: вы должны удалить его с помощью инструментов Subversion (т.е. из командной строки как svn delete
или используя Delete в TortoiseSVN. Просто удалив его используя del
, rm
или файловый менеджер, такой как Windows Explorer, заставит SVN видеть файл как "отсутствующий", а не как "удаленный", а фиксация репо не будет удалять; таким образом, при следующем обновлении рабочей копии отсутствующие файлы будут восстановлены. Таким образом, вы используете Subversion для удаления файла, чтобы Subversion знала, что вы действительно хотите удалить его.
На ваш последний вопрос - какая версия SVN и насколько велик репо (с точки зрения количества файлов). По сути, T-SVN должен пройтись по дереву и проверить каждый файл на соответствие репо-версии, чтобы убедиться, что он изменен. Начиная с SVN 1.7, формат рабочей копии изменился, так как в базе данных содержалось много метаданных, а улучшения в хранении нетронутых копий (т. Е. Как выглядел файл, когда он вышел из svn) означают, что он быстрее, чем он было. Если вы не используете 1.7, то стоит проверить. Кроме того, если у вас большой репозиторий, но вы работаете только в его небольшой части, рассмотрите возможность использования редких выписок, чтобы уменьшить размер вашей локальной рабочей копии. См. Этот ответ для извлечения одного файла из Subversion для краткого обзора или редких проверок.