Pull to refresh

Организация работы с git submodules

Reading time2 min
Views79K
Начиная работать с git у меня почти сразу возник вопрос — как работать с проектом, если некоторые его компоненты часто обновляются. Ярким примером служит разработка с использованием Symfony2. Фреймворк обновляется почти каждый день, нужно постоянно «подтягивать» код, чтоб он работал с последней версией Symfony2.

Под катом маленький 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

Вот собственно и все, приятной разработки. Много очевидных вещей, но и пост-то небольшой.
Tags:
Hubs:
+20
Comments24

Articles

Change theme settings