Vue Front-end Инженер

Vue Front-end Инженер

Роадмап навыков для прокачки

Базовые принципы командной работы и контроля версий

Software Development ProcessesСистема контроля версий (Git)Основное

Основная идея

Командная работа с системой контроля версий требует понимания базовых концепций: распределённая архитектура, локальные и удалённые репозитории, синхронизация изменений и стратегии разрешения конфликтов.

Ключевые концепции VCS

  • Репозиторий — хранилище кода с полной историей изменений
  • Коммит — атомарная единица изменений с уникальным хешем
  • Ветка — независимая линия разработки
  • Remote — удалённый репозиторий (GitHub, GitLab, Bitbucket)
  • Clone/Fork — создание копии репозитория

Распределённая vs централизованная 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

graph TD S[Центральный сервер] --> C1[Клиент 1] S --> C2[Клиент 2] S --> C3[Клиент 3]

Особенности:

  • Единственный источник правды — сервер
  • Клиенты работают только с последней версией
  • Требуется постоянное соединение с сервером
  • Если сервер недоступен — работа невозможна

Ключевые концепции Git

ТерминОписание
RepositoryХранилище проекта с полной историей
CommitСнимок изменений с уникальным SHA-1 хешем
BranchУказатель на коммит, линия разработки
HEADУказатель на текущий коммит/ветку
RemoteУдалённый репозиторий (origin)
Working DirectoryРабочая директория с файлами
Staging AreaИндекс для подготовки коммита

Структура коммита

graph LR A[Commit A] --> B[Commit B] B --> C[Commit C] B --> D[Commit D] C --> E[Commit E] D --> E

Каждый коммит содержит:

  • SHA-1 хеш — уникальный идентификатор (40 символов)
  • Author — автор изменений
  • Date — дата создания
  • Message — описание изменений
  • Parent — ссылка на родительский коммит(ы)
  • Tree — снимок файловой структуры

Практические примеры

Настройка командной работы

Шаг 1: Клонирование репозитория

bash
# Клонировать репозиторий команды
git clone https://github.com/team/project.git
cd project

Шаг 2: Настройка идентификации

bash
# Глобально (для всех проектов)
git config --global user.name "Имя Фамилия"
git config --global user.email "email@company.com"
 
# Локально (для конкретного проекта)
git config user.name "Имя Фамилия"
git config user.email "email@company.com"

Шаг 3: Просмотр удалённых репозиториев

bash
git remote -v
# origin  https://github.com/team/project.git (fetch)
# origin  https://github.com/team/project.git (push)

Шаг 4: Синхронизация с командой

bash
# Получить изменения коллег
git pull origin main
 
# Отправить свои изменения
git push origin feature/my-task

Clone vs Fork

bash
git clone https://github.com/team/project.git

Когда использовать:

  • Работа в своей команде
  • Прямой доступ к репозиторию
  • Обычная ежедневная разработка

Результат: Локальная копия, push в оригинальный репозиторий

Работа с несколькими remote

bash
# Добавить upstream (оригинальный репозиторий)
git remote add upstream https://github.com/original/project.git
 
# Синхронизация форка с оригиналом
git fetch upstream
git checkout main
git merge upstream/main
git push origin main

Правила командной работы

Conventional Commits

Conventional Commits — стандарт оформления сообщений коммитов, облегчающий автоматическую генерацию CHANGELOG и семантическое версионирование.

text
<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Типы коммитов:

ТипОписание
featНовая функциональность
fixИсправление бага
docsИзменения документации
styleФорматирование (не влияет на код)
refactorРефакторинг без изменения поведения
testДобавление/изменение тестов
choreОбновление зависимостей, конфигов

Примеры:

bash
git commit -m "feat(auth): add Google OAuth integration"
git commit -m "fix(api): handle null response from server"
git commit -m "docs: update README with setup instructions"

Git Hooks

Автоматизация проверок перед коммитом:

bash
# .git/hooks/pre-commit
#!/bin/sh
npm run lint
npm run test

Популярные инструменты: Husky, lint-staged


Стратегии синхронизации

Pull: fetch + merge vs rebase

bash
git pull origin main
# или явно
git pull --no-rebase origin main
gitGraph commit id: "A" commit id: "B" branch origin/main commit id: "C" checkout main commit id: "D" merge origin/main id: "Merge"

Создаёт merge-коммит, сохраняет историю.

⚠️

Настройка по умолчанию: git config --global pull.rebase false (merge) или git config --global pull.rebase true (rebase)


Пограничные кейсы

Конфликт при push

bash
git push origin main
# ! [rejected] main -> main (fetch first)
# error: failed to push some refs
 
# Решение:
git pull origin main  # получить изменения
# разрешить конфликты если есть
git push origin main

Force push (осторожно!)

🚫

git push --force перезаписывает историю на сервере. Используйте только для личных веток или с --force-with-lease.

bash
# Безопаснее: проверяет, что remote не изменился
git push --force-with-lease origin feature/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 и семантическое версионирование.


Источники