
Под катом маленький workflow по работе с проектом на Symfony2.
Пару дней назад Symfony2 перешел в стадию PR3. В связи с этим сразу же захотелось поиграться с последней версией symfony-sandbox, заточенную под PR3. Хочется получить рабочий sandbox со ссылкой на framework symfony2 и поддерживать его в актуальном состоянии обновляя фреймворк отдельно.
Для начала скачаем себе актуальную версию symfony-sandbox (нужна ветка PR3):
git clone -b PR3 github.com/symfony/symfony-sandbox.git symfony2sandbox
Далее мы хотим, чтобы фреймворк подключался как ссылка. То есть чтоб его можно было обновлять независимо. В этом много плюсов — главный из них, что проект можно разбить на независимые бандлы, которые разрабатываются и тестируются независимо от проектов которые их используют. Разрабатывая при помощи субмодулей (submodules) можно сделать так, что разные проекты будут использовать разные версии бандлов. Если говорить проще — проекты становятся маленькими, как бы состоящими из больших кирпичей, их легче поддерживать.Для того чтоб посмотреть как эта разработка будет примерно выглядеть: проект miam — в папке vendors лежат подключаемые фреймворки, которые живут независимо от текущего проекта, поэтому они подключены как субмодули.
Делаем по принципу гайда по работе с субмодулями на github.
Вот и все — теперь у нас грамотно оформленный проект, в котором четко отделен код независимых компонент от кода данного проекта. Теперь пару приемов, по работе с нашим проектом.
1) Допустим у нас появилось свободное время и мы хотим чтоб наш проект работал с последней версией субмодуля:
Заходим в директорию субмодуля
cd src/vendor/symfony/
Обновляем субмодульgit checkout -f
После этого мы запускаем unit тесты, и добиваемся чтоб все они были «зелеными».2) Допустим кто-то хочет развернуть ваш проект в своей локальной директории:
Первым делом клонирует проект
git clone ... [your_project.git]
Если теперь зайти в директории субмодулей — обнаружим что они пусты. Для восстановления целостного проекта нужно клонировать нужные версии субмодулей. Переходим в корень проекта и запускаем команду git submodule update --init
Вот собственно и все, приятной разработки. Много очевидных вещей, но и пост-то небольшой.