Миграция в SVN, запутанная по поводу удаления старых файлов - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть репозиторий 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 Ответ

1 голос
/ 20 декабря 2011

Любое изменение, которое вы вносите в репо, требует фиксации, так что да, после выполнения svn delete вам нужно svn commit.Точно так же, когда вы добавляете файлы, это изменение, которое необходимо зафиксировать.В обоих случаях можно отменить добавление и удаление без фиксации.

С точки зрения добавления и удаления файлов в одной транзакции, опять же, что «просто работает», вы фактически выпустите:

svn delete C.cpp
svn add D.cpp
svn commit

Если вы хотите восстановить удаленный файл, то вы можете просто восстановить файл из более ранней версии репозитория svn, а затем повторить (см. Также Как правильно восстановить удаленный файл из SVN? ).

Главное, что вы должны помнить при удалении файлов: вы должны удалить его, используя инструменты Subversion (т.е. из командной строки как svn delete или используя Delete внутриTortoiseSVN. Просто удалив его с помощью del, rm или файлового менеджера, такого как проводник Windows, SVN увидит файл как " отсутствует ", а не " удален ", иПри фиксации репо удаление не будет зафиксировано, поэтому при следующем обновлении рабочей копии отсутствующие файлы будут восстановлены. Таким образом, вы используете subversion для удаления файла, чтобы subversion знала, что вы действительно хотите удалить его.

Ваш последний вопрос - какая версия SVN и насколько велика репо (с точки зрения количества файлов). По сути, T-SVN должен пройтись по дереву и проверить каждый файл на соответствие репо-версии, чтобы увидеть, что этоНачиная с SVN 1.7, формат рабочей копии изменился: в базе данных содержалось много метаданных, а также улучшено хранилище нетронутых копий (т. е. что такое файлкед вроде когда вышел из svn) означает что он быстрее чем был.Если вы не используете 1.7, то стоит проверить.Кроме того, если у вас большой репозиторий, но вы работаете только в небольшой его части, рассмотрите возможность использования редких выписок, чтобы уменьшить размер вашей локальной рабочей копии.См. этот ответ до Извлечение одного файла из Subversion для краткого обзора или редких проверок.

...