Ответ
Основной и практически единственный инструмент в моих проектах — Git. Для C++ разработки это стандарт де-факто.
Мой типичный рабочий процесс:
# Создание feature-ветки от актуального main
$ git checkout -b feature/optimize-vector-allocations
# Работа с коммитами
$ git add src/vector_utils.cpp include/vector_utils.h
$ git commit -m "perf(vector): replace custom allocator with pmr"
# Синхронизация с удалённым репозиторием и создание Pull Request
$ git push origin feature/optimize-vector-allocations
Ключевые практики для C++ проектов:
- Ветвление: Использую Git Flow или его упрощённые варианты. Для хотфиксов создаю ветки от
mainилиrelease/*. - Интеграция: Работал с GitLab CI/CD и GitHub Actions для настройки пайплайнов сборки (CMake, Conan), статического анализа (Clang-Tidy, Cppcheck) и юнит-тестов (Google Test, Catch2).
- Качество кода: Настраивал pre-commit hooks для автоматического форматирования кода с помощью
clang-formatи проверки стиля. - Решение проблем: Регулярно выполняю
rebaseдля поддержания чистой истории иcherry-pickдля переноса отдельных исправлений между ветками. - Legacy системы: Имел ограниченный опыт с SVN при поддержке старых проектов, но всегда инициировал миграцию на Git.
Ответ 18+ 🔞
А, ну так, про гита рассказывать? Да это ж моя вторая религия, ёпта! Без него в современной разработке — как без рук, а в C++ особенно. Все эти мегабайты хедеров, тонны объектников — только гиту и доверять можно, и то с оглядкой.
Вот смотри, как у меня обычно день проходит, обычный такой рабочий процесс, ничего сверхъестественного:
# Отпочковался от мейна, как порядочный человек
$ git checkout -b feature/optimize-vector-allocations
# Написал что-то умное, теперь надо зафиксировать, пока не забыл
$ git add src/vector_utils.cpp include/vector_utils.h
$ git commit -m "perf(vector): replace custom allocator with pmr"
# И вперёд, на удалёнку, пусть коллеги смотрят и облизываются
$ git push origin feature/optimize-vector-allocations
Ну а дальше уже начинается магия, или, как я это называю, «поддержание адеквата в кодовой базе».
Про ветки: Я за классику, как ни крути. Git Flow — это наш бронепоезд. Для каждой фичи — своя ветка, для багфиксов — свои, для релизов — вообще святое. Особенно когда хотфикс прилетает в пятницу вечером — создаёшь ветку от main, быстренько чинишь эту поебень и не паришь мозг всем остальным. Чистота, порядок, никаких сюрпризов.
А вот CI/CD — это отдельная песня, я тебе скажу. Работал и с GitLab CI/CD, и с GitHub Actions. Настраивал эти пайплайны так, что они сами всё собирали, прогоняли тесты, статический анализ впаривали. CMake, Conan, Clang-Tidy, Cppcheck, Google Test — вся эта братия работает как часы, если правильно её настроить. Главное — чтобы после пуша ты не сидел, как дурак, и не ждал, скомпилируется ли. Пусть железо потеет, а не ты.
Качество кода — это святое, блядь. У меня в каждом проекте стоят pre-commit hooks на clang-format. Написал какую-нибудь хуйню, пытаешься закоммитить — а тебе тут же: «Э, дружок-пирожок, иди-ка ты нахуй, сначала отформатируй по-человечески». И ведь правильно делает! Волнение ебать, когда видишь, как код сам собой становится красивым.
С проблемами в гите — да похуй, всё решаемо. Rebase — мой лучший друг для поддержания истории чище, чем совесть у младенца. Cherry-pick — вообще волшебная палочка, когда нужно один конкретный фикс с одной ветки на другую перетащить, не таская за собой весь овердохуища коммитов.
А про SVN я даже вспоминать не хочу, честно говоря. Манда с ушами, а не система. Приходилось с ней сталкиваться в легаси-проектах, так это был такой пиздец, что я сразу же начинал агитацию за миграцию на Git. Как будто на дворе 2002-й год, ей-богу. Хуй с горы, а не контроль версий.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶