Лучший способ заменить все дерево каталогов в Subversion?

В рамках моего проекта Subversion у меня есть несколько каталогов, которые содержат другие проекты с открытым исходным кодом, которые нужны моему коду. Например, ffmpeg, freetype, matrixssl и несколько других.

Каков наилучший способ обновления SVN для хранения последней версии одного из этих проектов?

По существу, я буду делать следующее (используя пример ffmpeg):

1) Rename current ffmpeg folder to ffmpeg.old
2) Download new version of ffmpeg from net
3) Make sure it and my code compile and work fine together
4) Update subversion to now hold the "new" version of ffmpeg
5) Delete ffmpeg.old directory tree

Ответ 1

Вы можете взглянуть на svnbook, говорящий о ветках поставщиков. Это именно то, что вы пытаетесь выполнить

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

Ответ 2

У меня такая же ситуация с CMake, где я сохраняю двоичную версию win32 в нашем каталоге поставщика:

branches/
trunk/
vendor/
    cmake/
        cmake-2.6.0/
        cmake-2.6.1/
        cmake-2.6.2/
        ...

Затем я использую svn: externals для ссылки на версию CMake, которую я использую. Делает очень простой тест на обновление до новых версий, и также ясно, какая версия CMake я использую.

Ответ 3

Все правильно, за исключением того, что вам не нужны шаги 1 и 5 - если шаг 3 не позволяет вернуть изменения с помощью функции возврата svn.

Ответ 4

Я думаю, у вас есть два варианта.

А)

  • SVN Удалите все файлы.
  • Получить актуальность и заставить ее работать.
  • SVN Добавьте все файлы.

Pro: Убедитесь, что дополнительные файлы не сохранены, если они не указаны в последней версии.

Con: Может потребоваться много времени.

В)

  • Загрузите и установите новую версию поверх старой.
  • Заставьте это работать.
  • SVN добавить новые файлы.

Pro: вы можете видеть, что изменилось в файлах инструмента.

Con: Может закончиться беспорядком. В зависимости от перезаписи инструмента могут возникать ошибки.

Ответ 5

Если некоторые из проектов-поставщиков также используют Subversion, вы можете добавить свойство svn: externals в родительский каталог вашей ветки/туловища.

Посмотрите книгу SVN для более подробной информации.