Работа с ветками в git

Настройки репозитория

Указанные ниже настройки необходимы для линейной истории в мастере:

Настройки репозитория для поддержания линейной истории

Мастер

  • Мастер-ветка репозитория всегда готова к релизу и разворачиванию на staging, RC и продакшене

  • В мастер-ветку сливаются только ветки прошедшие ревью кода и тестирование

  • Пушить коммиты в обход MR допускается только в исключительных случаях

Релизы

См. Релизы сервисов

Формат имен веток

Каждая ветка имеет префикс в виде типа задачи:

  • feat – новая функциональность

  • fix – правки, включая баг-фикс

  • chore – рефакторинг и другие улучшения напрямую не связанные с продуктом

После префикса идут опциональный номер задачи в Трекере и короткое осмысленное название.

Примеры:

Код-ревью и слияние с мастером

После успешного ревью ветка должна быть протестирована QA. Для этого автору необходимо выставить соответствующий статус в Трекере и проставить лейбл в GitLab.

QA разворачивает ветку на тестовом окружении и проверяет изменения. Исключения:

  • MR не требующий ревью и тестирования

  • разработчик и QA договорились, что есть смысл тестировать только интеграционную ветку

Ветка не вливается в мастер или интеграционную ветку пока тестировщики не переведут ее в статус ✅ Тестирование.

Важно: для избежания конфликтов необходимо периодически делать rebase на мастер или интеграционную ветку.

Для слияния с мастером:

Для слияния с интеграционной веткой рассрочки:

По умолчанию коммиты в ветке перед слиянием сквошатся. Разработчик может отказаться от сквоша коммитов если требуется сохранить в истории репозитория важные этапы работы над изменениями.

Интеграционная ветка

Интеграционная ветка необходима в двух перечисленных ниже случаях.

1. Упрощение ревью кода путем разбиения большого количества изменений небольшие итерации – слияние (и выкатка) таких изменений с мастером не повлияет на текущую функциональность.

Примеры:

  • Рефаторинг, который затрагивает десятки файлов

  • Сложная логика, которую проще дорабатывать последовательными шагами

2. Большая продуктовая задача с декомпозицией на подзадачи.

Примеры:

  • Рассрочка

  • Авторизация по контрагентам

  • Импорт данных из нового источника

  • Перевод API на новую версию

Интеграционная ветка и MR для нее в статусе Draft создаются заранее – до начала работы над крупной функциональностью. Формат имени: integration/<title>.

Работа над каждым из этапов задачи ведется в отдельной ветке. Над отдельными ветками могут работать разные разработчики.

Промежуточная ветка сливается с интеграционной по готовности.

В рамках интеграционной ветки периодически выполняется git rebase с мастером во избежание конфликтов.

Процесс тестирования интеграционной ветки отличается только типом тестирования. QA проводит интеграционное тестирование изменений полагаясь на то, что каждая из итераций была уже успешно протестирована в отдельных ветках, слитых с интеграционной.

Сквошить коммиты интеграционной ветки не требуется.

Завершение работы с веткой

Для того чтобы рабочая ветка после слияния с мастером или интеграционной веткой была удалена на сервере Git, необходимо поставить галочку Delete source branch в MR.

Последнее обновление