Организация репозитория Subversion при работе с несколькими проектами Загурский Сергей
КРИ 2005, Москва. © MiST-land South. Несколько проектов одновременно Несколько разных проектов одновременно Проект + аддон/мод/патч Проект + продолжение проекта
КРИ 2005, Москва. © MiST-land South. Проблемы при разработке нескольких проектов Для удешевления разработки есть общий на несколько проектов код Синхронизация Взаимное влияние проектов через общий код Багфиксы в одном проекте могут "сломать" другой Процесс внедрения новых версий внешних библиотек может быть заторможен из-за того, что библиотека используется в нескольких проектах
КРИ 2005, Москва. © MiST-land South. С каким кодом работаем? Код проекта Код, пишущийся по конкретный проект Как правило используется еще и для аддона или следующего проекта из линейки Общий код для нескольких проектов - шареный код Внешние библиотеки
КРИ 2005, Москва. © MiST-land South. Варианты организации кода Внешние и общие библиотеки отдельно от кода проекта Внешние и общие библиотеки вместе с кодом проекта
КРИ 2005, Москва. © MiST-land South. Внешние и общие библиотеки отдельно от кода проекта Репозиторий Внешние библиотеки Общие библиотеки Проект1 Проект2 Рабочая копия C:\external C:\shared C:\project1 C:\project2
КРИ 2005, Москва. © MiST-land South. Внешние и общие библиотеки вместе с кодом проекта Репозиторий Внешние библиотеки Общие библиотеки Проект1 Проект2 Рабочая копия C:\project2\external C:\project2\shared C:\project2 C:\project1\external C:\project1\shared C:\project1
КРИ 2005, Москва. © MiST-land South. Почему Subversion? Надежность Бесплатные бранчи Крайне желательны, т. к. для внешних и общих библиотек делается бранч в каждом проекте Простые и очевидные принципы работы Наличие удобных клиентов Простота развертывания Умение обрабатывать бинарные файлы
КРИ 2005, Москва. © MiST-land South. Схема репозитория \repo \external \shared \project1 \project2 \personal
КРИ 2005, Москва. © MiST-land South. Схема репозитория (2) \repo\external \stlport \current \5.0.0rc2 \4.6.2 \4.6.0 \dxsdk \current \feb_2005 \psdk \meqon \oggvorbis \boost
КРИ 2005, Москва. © MiST-land South. Схема репозитория (3) \repo\shared \mesh \trunk \tags \material \trunk \tags \sound \physics
КРИ 2005, Москва. © MiST-land South. Схема репозитория (4) \repo\project1 \trunk \src \external boost stlport psdk dxsdk \shared mesh material \project1 \branches \tags
КРИ 2005, Москва. © MiST-land South. Схема репозитория (5) \repo\personal \tutankhamun \ramesess \khufu \thutmose \amenhotep
КРИ 2005, Москва. © MiST-land South. Рабочий цикл рядового программиста update commit
КРИ 2005, Москва. © MiST-land South. Цикл обновления внешней или общей библиотеки Обновить копию, локальную для какого-либо проекта Слить изменения в основной каталог с библиотекой Слить изменения из основного каталога в каждый проект, где это требуется Таким образом, изменения в одном проекте "внезапно" не окажутся в другом
КРИ 2005, Москва. © MiST-land South. Дальнейшее развитие Приравниваем утилиты для сборки проекта к внешним библиотекам Выкладываем их в репозитории вместе с каждым проектом Настраиваем процесс сборки так, чтобы использовались утилиты, которые находятся вместе с проектом. Получаем систему сборки, не зависящую от того, что установлено на конкретной машине Версию смогут собрать даже не программисты
КРИ 2005, Москва. © MiST-land South. Линейки проектов Линейкой проектов назовем проекты, которые развиваются на одной базе исходников
КРИ 2005, Москва. © MiST-land South. Управление линейками проектов Организуем каждый проект так, чтобы можно было начать новый простым бранчем После такого бранча изменения в одном проекте можно легко перенести в другой Но этот перенос всегда под контролем!
КРИ 2005, Москва. © MiST-land South. ?