Лучший способ заменить все дерево каталогов в 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

person KPexEA    schedule 10.10.2008    source источник


Ответы (5)


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

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

person Peter Parker    schedule 10.10.2008

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

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

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

person JesperE    schedule 10.10.2008
comment
так что по сути проект svn содержит все версии, а вы просто псевдоним текущей? - person KPexEA; 11.10.2008
comment
да. Нет смысла удалять старые, поскольку каталог поставщика никогда не извлекается напрямую; это упоминается только при использовании svn: externals. - person JesperE; 11.10.2008

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

person Dandikas    schedule 10.10.2008
comment
Будет ли это обрабатывать удаление файлов, которые больше не используются в новой версии, или мне придется обнаруживать и удалять их вручную? - person KPexEA; 11.10.2008
comment
используйте svn delete для удаления старого дерева перед загрузкой последней версии. Тогда ничего разрешать не нужно, а если не удалось выполнить шаг 3 - вернуться. В любом случае ничего не удаляется из SVN. - person Dandikas; 11.10.2008
comment
svn_load_dirs.pl позаботится об удаленных файлах - person DanJ; 11.10.2008

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

А)

  1. SVN Удалите все файлы.
  2. Получите актуальную информацию и заставьте ее работать.
  3. SVN Добавьте все файлы.

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

Против: может занять много времени.

Б)

  1. Скачайте и установите новую версию поверх старой.
  2. Сделай так, чтоб это работало.
  3. SVN добавляет любые новые файлы.

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

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

person Tilendor    schedule 10.10.2008
comment
Для чего используется шаг 1 в обоих сценариях? Мне кажется, это старая привычка тех дней, когда вы не использовали SVN. - person Dandikas; 11.10.2008
comment
исправил это. Я слишком много уклонялся от вопроса - person Tilendor; 11.10.2008

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

Более подробную информацию см. В книге SVN.

person Black    schedule 11.10.2008
comment
Верно, но это оставляет вас во власти репозитория поставщика. См. Ответ stackoverflow.com/questions/192915/, которое описывает ветви поставщиков, для более контролируемого метода. - person Martijn Heemels; 14.07.2009