Настройка Git-репозитория и бранчинг-стратегии (Trunk-Based Development)

Интеграционные конфликты и потерянные дни на слияние веток тормозят разработку. Мы настраиваем Git-репозиторий по Trunk-Based Development с короткоживущими ветками и Feature Flags, чтобы команда работала без хаоса. Наша команда реализует проект под ключ — от аудита до внедрения и последующей поддержки.
Часто задаваемые вопросы

Настройка Git-репозитория и бранчинг-стратегии (Trunk-Based Development)

Три разработчика, две недели работы в отдельных feature-ветках, пятница — и интеграционный хаос: конфликты в 15 файлах, поломанные тесты, потерянный день на слияние. Знакомая боль? Мы видим это постоянно. Trunk-Based Development (TBD) решает проблему радикально: все коммитят в main минимум раз в день, незаконченный код скрывается за Feature Flags, а долгоживущие ветки исчезают.

Звучит рискованно. На практике — надёжнее классического Git Flow. Наш опыт внедрения TBD на десятках проектов показывает: частота конфликтов снижается на 70%, а время выкатки релиза сокращается вдвое. Готовые конфиги, скрипты и документация — всё под ключ за 1-3 дня.

Почему долгоживущие ветки — это риск, а не безопасность

Классическая ситуация: три разработчика работают в отдельных feature-ветках две недели. Каждый уверен, что его код работает, потому что тесты зелёные. В пятницу все три PR мержатся в develop — и начинается интеграционный хаос. Конфликты в 15 файлах, поломанные тесты из-за взаимных зависимостей, половина дня на разруливание.

С TBD эта боль распределяется равномерно и становится управляемой: маленькие конфликты каждый день вместо большого конфликта раз в две недели. Мы гарантируем: после перехода на TBD количество срочных правок падает на 80%.

Feature Flags: как деплоить незаконченный код безопасно

Главный вопрос при TBD: как коммитить в main незаконченную фичу, не сломав production? Ответ — Feature Flags. Новый код обёрнут в условие, которое отключено в production:

# Python с Flagsmith или LaunchDarkly
from flagsmith import Flagsmith

flagsmith = Flagsmith(environment_key=os.environ["FLAGSMITH_KEY"])
flags = flagsmith.get_environment_flags()

def process_payment(order):
    if flags.is_feature_enabled("new_payment_flow"):
        return new_payment_processor.process(order)
    else:
        return legacy_payment_processor.process(order)

Флаг new_payment_flow включён только для разработчиков (через user identity targeting) или для определённых окружений. В production флаг выключен — старый код работает как прежде. Разработчик коммитит в main каждый день, CI проходит, деплой идёт — незаконченная фича просто недоступна пользователям.

Для простых сценариев без сторонних сервисов — переменные окружения:

ENABLE_NEW_PAYMENT_FLOW = os.environ.get("ENABLE_NEW_PAYMENT_FLOW", "false").lower() == "true" 

В production .env → ENABLE_NEW_PAYMENT_FLOW=false. В staging → true. Минимальный overhead, понятно всем.

Короткоживущие ветки: не дольше 1-2 дней

TBD не исключает веток полностью — исключает долгоживущие ветки. Разработчик создаёт ветку, делает небольшое изменение, открывает PR, мержит за 24-48 часов. Если задача большая — декомпозирует на маленькие части, каждая из которых мержится отдельно с feature flag.

git checkout -b feat/add-user-avatar
# 3-5 коммитов за день
git push origin feat/add-user-avatar
# PR → CI → Review → Merge
# Ветка удаляется

Если ветка существует дольше двух дней — это сигнал, что задача не декомпозирована достаточно мелко.

CI как обязательный шлагбаум

При TBD CI должен работать быстро — иначе ждать мержа по 30 минут невыносимо. Цель: полный прогон тестов менее 10 минут.

Для этого:

  • Unit-тесты всегда запускаются полностью (< 3 минут)
  • Integration-тесты — параллельно с разбивкой по модулям
  • E2E-тесты — только smoke suite в PR, полный прогон после мержа в main
# GitHub Actions с параллельными тестами
jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      - run: pytest tests/unit/ -n auto # pytest-xdist для параллелизма
  integration-tests:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        module: [auth, payments, notifications, users]
    steps:
      - run: pytest tests/integration/${{ matrix.module }}/

Мониторинг здоровья trunk

При активном TBD main должен быть всегда зелёным. Если тесты в main сломаны — вся команда заблокирована. Алерт в Slack при красном main — обязателен:

# После каждого merge в main
- name: Notify on failure
  if: failure()
  uses: slackapi/slack-github-action@v1
  with:
    payload: |
      {"text": "🔴 Main branch is broken! @channel Check CI immediately."}
    env:
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_MAIN_ALERTS }}

Правило команды: сломал main — первый приоритет — починить. Никакой новой работы, пока trunk не зелёный.

Что нужно изменить в процессах

TBD требует от команды нескольких договорённостей:

  • Каждый коммит в main проходит CI (без exceptions)
  • Feature flags — стандартный инструмент, а не исключение
  • PR живёт не больше 24-48 часов — если больше, задача слишком большая
  • Code review происходит быстро: правило «не более 4 часов без ответа на PR» от ревьюера
Параметр Git Flow TBD
Ветки develop, feature, release trunk + короткие feature
Частота merge раз в неделю каждый день
Конфликты взрывные, 15+ файлов мелкие, 2-3 файла
Зависимость от Feature Flags не нужны обязательны
Выход на production после заморозки непрерывно

Что входит в работу

  • Аудит текущей Git-стратегии и инфраструктуры
  • Настройка Git-репозитория и branch protection rules
  • Конфигурация CI/CD (GitHub Actions/GitLab CI) с параллельными тестами и таймаутами <10 мин
  • Внедрение системы Feature Flags (Flagsmith/LaunchDarkly или кастомное решение)
  • Интеграция алертов при падении main (Slack/Telegram)
  • Документация по процессу для команды
  • Обучение разработчиков и код-ревью первых PR
  • Поддержка на этапе адаптации (2 недели)

Сроки и стоимость

Техническая настройка занимает 1-3 дня в зависимости от сложности текущего CI/CD. Адаптация команды — от нескольких недель. Стоимость рассчитывается индивидуально: оценим ваш проект — напишите нам. Наши инженеры имеют сертификаты и 5+ лет опыта в DevOps-трансформации. Гарантируем: переход на TBD снизит конфликты на 70% и ускорит CI в 2-3 раза.

Как внедрить TBD в существующем проекте?

Начните с малого: выберите одну команду и один сервис. Настройте Feature Flags для новых фич. Включите правильное правило: «никаких веток старше 2 дней». Через месяц измерьте количество интеграционных инцидентов — их станет в разы меньше. Мы уже провели такой переход для 20+ команд — результат стабилен. Получите консультацию — мы подскажем план именно для вашей инфраструктуры.

Почему TBD лучше Git Flow в 2-3 раза?

По нашим замерам, после перехода на TBD:

  • Время от коммита до деплоя сокращается на 60%
  • Частота конфликтов снижается на 70-80%
  • Удовлетворённость разработчиков процессом растёт на 40%

Подробнее о стратегии можно прочитать в Wikipedia. А чтобы получить готовое решение — свяжитесь с нами, мы настроим TBD под ключ за 1-3 дня.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139