Базовые принципы командной работы и контроля версий
Software Development Processes → Система контроля версий (Git) → Основное
Основная идея
Командная работа с системой контроля версий требует понимания базовых концепций: распределённая архитектура, локальные и удалённые репозитории, синхронизация изменений и стратегии разрешения конфликтов.
Ключевые концепции VCS
Репозиторий — хранилище кода с полной историей изменений
Коммит — атомарная единица изменений с уникальным хешем
Централизованная (SVN) — один сервер, клиенты работают с ним напрямую
Распределённая (Git) — каждый разработчик имеет полную копию репозитория
Принципы командной работы
Частые коммиты с понятными сообщениями
Регулярная синхронизация с удалённым репозиторием
Code Review перед слиянием изменений
Использование веток для изоляции работы
Соглашение о формате коммитов (Conventional Commits)
Частые ошибки на собеседованиях
Не понимают разницу между локальным и удалённым репозиторием
Путают clone и fork — clone для личной работы, fork для контрибуции в чужой проект
Не знают что такое origin — это алиас удалённого репозитория
Забывают про pull перед push — приводит к конфликтам
Не понимают концепцию SHA-хеша коммита
Введение и проблематика
Современная разработка программного обеспечения — командный процесс. Несколько разработчиков одновременно работают над одним проектом, и без правильной организации это приводит к потере кода, конфликтам и хаосу.
VCS (Version Control System) — система контроля версий. Позволяет отслеживать изменения, работать параллельно и безопасно объединять работу нескольких разработчиков.
Проблемы без VCS
Файлы с именами project_final_v2_FINAL_new.zip
Потеря кода при случайном удалении
Невозможность вернуться к рабочей версии
Перезапись чужих изменений
Сложность синхронизации между разработчиками
Базовая теория
Типы систем контроля версий
Примеры: SVN, CVS, Perforce
graphTD S[Центральный сервер]--> C1[Клиент 1] S --> C2[Клиент 2] S --> C3[Клиент 3]
Особенности:
Единственный источник правды — сервер
Клиенты работают только с последней версией
Требуется постоянное соединение с сервером
Если сервер недоступен — работа невозможна
Ключевые концепции Git
Термин
Описание
Repository
Хранилище проекта с полной историей
Commit
Снимок изменений с уникальным SHA-1 хешем
Branch
Указатель на коммит, линия разработки
HEAD
Указатель на текущий коммит/ветку
Remote
Удалённый репозиторий (origin)
Working Directory
Рабочая директория с файлами
Staging Area
Индекс для подготовки коммита
Структура коммита
graphLR A[Commit A]--> B[Commit B] B --> C[Commit C] B --> D[Commit D] C --> E[Commit E] D --> E
# Глобально (для всех проектов)gitconfig--globaluser.name"Имя Фамилия"gitconfig--globaluser.email"email@company.com"# Локально (для конкретного проекта)gitconfiguser.name"Имя Фамилия"gitconfiguser.email"email@company.com"
gitcommit-m"feat(auth): add Google OAuth integration"gitcommit-m"fix(api): handle null response from server"gitcommit-m"docs: update README with setup instructions"
Настройка по умолчанию: git config --global pull.rebase false (merge) или git config --global pull.rebase true (rebase)
Пограничные кейсы
Конфликт при push
bash
gitpushoriginmain# ! [rejected] main -> main (fetch first)# error: failed to push some refs# Решение:gitpulloriginmain# получить изменения# разрешить конфликты если естьgitpushoriginmain
Force push (осторожно!)
🚫
git push --force перезаписывает историю на сервере. Используйте только для личных веток или с --force-with-lease.
bash
# Безопаснее: проверяет, что remote не изменилсяgitpush--force-with-leaseoriginfeature/my-branch
Плюсы и минусы подходов
Подход
Преимущества
Недостатки
Частые маленькие коммиты
Легче отследить изменения, проще откат
Много записей в истории
Редкие большие коммиты
Чистая история
Сложнее найти причину бага
Rebase
Линейная история
Переписывает историю
Merge
Сохраняет полную историю
Нелинейная история
Вопросы интервьюера
Q: Чем отличается clone от fork?
Clone создаёт локальную копию репозитория. Fork создаёт копию на сервере (GitHub) с возможностью отправки Pull Request в оригинал.
Q: Что такое origin?
Origin — это алиас (псевдоним) для URL удалённого репозитория по умолчанию. Можно добавлять другие remote с любыми именами.
Q: Что такое SHA-хеш коммита?
40-символьный уникальный идентификатор коммита, вычисленный на основе содержимого (SHA-1). Гарантирует целостность данных.
Q: Почему Git называется распределённой VCS?
Каждый разработчик имеет полную копию репозитория со всей историей. Работа возможна офлайн, синхронизация происходит при необходимости.
Q: Что такое Conventional Commits?
Соглашение о формате сообщений коммитов: type(scope): description. Позволяет автоматизировать генерацию changelog и семантическое версионирование.