AIOps использует Trunk-Based Development с короткоживущими feature branches и строгими правилами коммитов.
Основные принципы
- Main branch — всегда готов к деплою в production
- Feature branches — короткоживущие (1-3 дня max)
- Conventional Commits — единственный формат коммитов
- Pre-commit hooks — автоматическая проверка перед коммитом
Именование веток
Формат
1 | |
Типы веток
feat/— новая функциональностьfix/— исправление багаrefactor/— рефакторинг без изменения поведенияchore/— обслуживание, зависимостиdocs/— только документацияtest/— добавление/исправление тестов
Примеры
1 2 3 4 5 | |
Формат коммитов (Conventional Commits)
Структура
1 | |
Важно: Коммиты должны быть однострочными (без body, без footers).
Типы коммитов
feat— новая функциональностьfix— исправление багаrefactor— рефакторинг кодаperf— улучшение производительностиtest— добавление/исправление тестовdocs— изменения в документацииstyle— форматирование, пробелы (не влияет на логику)build— изменения в build system или зависимостяхci— изменения в CI/CD конфигурацииchore— обслуживание, не затрагивающее src или testrevert— откат предыдущего коммита
Примеры
1 2 3 4 5 6 7 | |
Workflow
1. Создать feature branch
1 2 3 | |
2. Работать с изменениями
1 2 3 4 5 6 | |
3. Создать Merge Request
- Используй шаблон MR
- Укажи описание изменений
- Добавь reviewer'ов
- Убедись, что CI проходит
4. Code Review
- Ответь на комментарии
- Внеси исправления
- Получи approval
5. Merge
- Squash & Merge — предпочтительный способ
- Удали feature branch после merge
Pre-commit Hooks
Pre-commit hooks запускаются автоматически перед каждым коммитом.
Установка
1 2 | |
Что проверяется
- Базовые проверки:
check-ast— валидность Python синтаксисаtrailing-whitespace— пробелы в конце строкend-of-file-fixer— пустая строка в конце файлаcheck-yaml— валидность YAML-
check-merge-conflict— маркеры merge конфликтов -
Conventional Commits:
-
conventional-pre-commit— проверка формата сообщения коммита -
Python Quality:
ruff check— линтинг кодаruff format— форматированиеmypy— проверка типов (strict mode)
Пропуск hooks (осторожно!)
1 2 | |
Никогда не пропускайте hooks без веской причины!
Правила работы с main
Запрещено:
- ❌ Прямой push в
mainбез Merge Request - ❌ Force push в
main - ❌ Merge без approval
- ❌ Merge с failing CI
- ❌ Коммиты без conventional format
Обязательно:
- ✅ Все изменения через Merge Request
- ✅ Минимум 1 approval для merge
- ✅ Все CI проверки должны пройти
- ✅ Conventional Commits формат
- ✅ Актуальная ветка с main перед merge
Rebase vs Merge
Rebase (рекомендуется)
Используй rebase для синхронизации с main:
1 2 3 4 5 6 7 8 9 10 11 | |
Merge (только для main)
Merge используется только при слиянии feature branch в main через MR.
Amend Commits
НИКОГДА не используй git commit --amend для коммитов, которые уже были pushed в remote, если это не твоя личная ветка и никто другой её не использует.
1 2 3 4 5 6 7 8 9 | |
Cherry-pick
Используй cherry-pick для переноса конкретных коммитов:
1 2 | |
Конфликты
Разрешение конфликтов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Отменить rebase
1 | |
Полезные команды
Просмотр истории
1 2 3 4 5 6 7 8 | |
Stash (временное сохранение)
1 2 3 4 5 6 7 8 9 10 11 | |
Откат изменений
1 2 3 4 5 6 7 8 | |
Связанные страницы
- Branching Strategy — детали стратегии ветвления
- Code Review Guide — как делать code review
- Getting Started — первые шаги
- Definition of Done — критерии готовности