- PVSM.RU - https://www.pvsm.ru -

Git – это не только удобная распределенная VCS, но и инструмент подготовки релизов.
В статье будет рассмотрен flow на примере Java-проектов на Maven. Статья может быть полезна для разработчиков малых и средних команд, подразумеваются базовые знания git. Материал частично перекликается с git-flow [1], но здесь описан более простой вариант.
В классическом случае в репозитории существует одна ветка master, из нее же делаются сборки. Если проект собирается при этом на build-сервере, это может привести к беспорядку – несколько разных билдов под одной версией, не ясен набор коммитов, которые попадают в релиз (например, если сборка делается автоматически по триггеру на VCS).

Первое что можно сделать – ввести вспомогательную ветку release, в которую делается регулярный merge из master (скриншот сделан в TortoiseGit, timeline снизу-вверх). Для maven-проектов в момент merge в pom-файлах версия SNAPSHOT заменяется на релизную. Если все сделано правильно, это единственный конфликт. Желательно ставить тег с номером версии. После этого в ветке master делается major-up SNAPSHOT-версии, таким образом master всегда SNAPSHOT, release – всегда нет. Соответственно, build-сервер настроен на ветку release для production-сборок.
Недостатком варианта с двумя ветками master и release является невозможность сделать хотфикс, не выпуская новую функциональность из master, что может быть критично.

Для этого можно ввести ветку hotfix, которая будет расти из коммита, предшествующего merge’у в release. Первым коммитом в этой ветке будет minor-up SNAPSHOT-версии (на иллюстрации — 1). Далее сделанные исправления мержатся на ветки release и master. При merge в release разрешается единственный конфликт в пользу фиксации не-SNAPSHOT-minor-версии (2), при merge в master версия остается из master (3). После merge в release в ветке hotfix делается minor-up SNAPSHOT-версии (4). Перед очередным major-релизом hotfix мержится в master – таким образом мы не потеряем все исправления. После окончания подготовки веток они отправляются в origin-репозиторий.
Основные плюсы решения:
К минусам можно отнести невозможность выпуска hotfix в предыдущем major-релизе. Также невозможно набрать релиз только из нужных коммитов. Это решается усложнением flow и выходит за рамки данной статьи.
Для многих здесь нет ничего нового, но судя по тому же github, аболютное большинство open-source проектов использует самую простую схему с одной веткой.
А какой flow используете вы?
Полезные ссылки: ProGit [2], Git How To [3]
Автор: seregamorph
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/20378
Ссылки в тексте:
[1] git-flow: http://habrahabr.ru/post/147260/
[2] ProGit: http://git-scm.com/book
[3] Git How To: http://githowto.com/ru
[4] Источник: http://habrahabr.ru/post/159107/
Нажмите здесь для печати.