Перейти к основному содержанию
`Ctrl`+`K`

# Предисловие

## Назначение

Руководство по изучению и практическому применению системы управления версиями `Git`.
Цель — сформировать у читателя систематизированное понимание принципов работы `Git`: от базовых концепций до организационных аспектов командной разработки и внутренней логики системы.

## Аудитория

Руководство предназначено для:

- системных и прикладных разработчиков;

- внешних партнёров и заказчиков;

- технических специалистов (дизайнеров, технических писателей).

## Содержание

Руководство включает:

- объяснение ключевых концепций и терминологии систем управления версиями (`VCS`);

- практические примеры команд с пояснением параметров и флагов;

- рекомендации по организации процесса разработки;

- ответы на часто задаваемые вопросы новичков;

- описание типовых проблем и алгоритмы их решения.

Руководство разделено на две части:

1. Базовый курс. Для разработчиков без предварительных знаний о системах контроля версий. Материал рассчитан на углублённое изучение.

2. Организационные аспекты и правила работы. Описание `workflow`, соглашений и корпоративных стандартов для работы с репозиториями. Обязательно к применению сотрудниками ООО «Бизнес Технологии»; рекомендовано внешним партнёрам и контрибьюторам.

## Предварительные требования

Обязательно установите систему управления версиями `Git`.
Актуальные дистрибутивы для всех поддерживаемых ОС доступны на официальном сайте.

Дополнительные инструменты (рекомендуемые):

Совет

Часть перечисленных инструментов имеет встроенные аналоги в операционных системах, поддерживаемых корпоративным стандартом `GlobalERP` (например, `Блокнот` в `Windows` или `nano` в `UNIX-подобных` системах).
Их использование не обязательно, но рекомендуется: это упрощает, ускоряет и делает нагляднее взаимодействие с `Git`.

Все дополнительные инструменты, упоминаемые в руководстве, явно обозначаются как опциональные при первом использовании.

Перечень рекомендуемого ПО:

- GitExtensions — кроссплатформенный графический интерфейс с открытым исходным кодом для управления репозиториями `Git`; визуализирует историю изменений и упрощает сложные операции;

- GitToolBox (плагин для IDEA или Giga IDE) — расширяет функциональность `Git` непосредственно в интерфейсе `IDE`: отображает имя текущей ветки, статус файлов в реальном времени и другое;

- VS Code — современный кроссплатформенный редактор кода с мощной встроенной поддержкой `Git`; позволяет выполнять большинство операций через интуитивный графический интерфейс, минимизируя взаимодействие с консольными редакторами, такими как `Vim`;

- LazyGit — консольная TUI-утилита для работы с `Git`; сочетает мощь командной строки и удобство визуального интерфейса прямо в терминале.

## Git

`Git` — современная, высокопроизводительная, распределённая система управления версиями (`VCS`).
Она отслеживает изменения в файлах и управляет ими. Применяется не только для исходного кода, но и для любых текстовых файлов: документации, конфигураций и т.д.

`Git` сохраняет «снимки» состояния проекта на разных этапах. Вы можете:

- вернуться к любому снимку;

- сравнить изменения между ними;

- создать отдельную ветку для экспериментов, не затрагивая основную версию.

### Основные определения

- Система управления версиями (`VCS`): отслеживает изменения в файлах проекта (кода, документации, конфигураций и других артефактов); позволяет восстановить любую версию, сравнить изменения, определить автора и причину правок;

- Распределённая система: в отличие от централизованных систем (например, `SVN`), где история хранится на одном сервере, в `Git` каждый участник имеет полную локальную копию репозитория; это обеспечивает высокую скорость операций, отказоустойчивость и гибкость рабочих процессов, так как разработчики могут обмениваться изменениями напрямую.

## Ключевые особенности

- Полное хранение истории: `Git` сохраняет снимки состояния проекта, а не разницу между файлами; это создаёт неизменяемую хронологию всех изменений;

- Поддержка параллельной разработки через ветвление и слияние:

  - ветвление — изолированные линии разработки для новой функциональности, исправлений или экспериментов, не затрагивающие основную ветку (`main` или `master`);

  - слияние — механизм интеграции завершённой функциональности из одной ветки в другую;

- Распределённая архитектура: каждый разработчик работает с полной локальной копией репозитория; это позволяет создавать коммиты, переключаться между ветками и просматривать историю без сетевого подключения; синхронизация с удалёнными репозиториями (например, на `GitLab`) выполняется отдельными командами (`git fetch`, `git push` и т.д.);

- Целостность данных: все объекты в `Git` (коммиты, файлы, теги) идентифицируются по криптографическому хешу (`SHA-1`), вычисленному от их содержимого; любая попытка изменить историю нарушает хеши и становится заметной.

## Взаимодействие с Git

Руководство фокусируется на работе через `CLI` (командную строку), так как это:

- даёт полное понимание внутренних механизмов `Git`;

- обеспечивает универсальность навыков между операционными системами (`Windows`, `macOS`, `GNU/Linux`);

- предоставляет доступ ко всем функциям, включая низкоуровневые команды, недоступные в GUI.

Для обучения некоторые операции демонстрируются через GUI, например `VS Code`. Большинство команд также доступны в популярных `IDE`:

- `JetBrains IntelliJ IDEA` (`Giga IDE`);

- `Microsoft Visual Studio Code` (`VS Code`);

- другие аналогичные среды.

## Глоссарий (ключевые термины и концепции)

Для изучения материала необходимо понимание следующих терминов:

- Репозиторий (`Repository`): хранилище проекта со всей историей изменений и служебной информацией; физически представлен папкой `.git` в корне проекта;

- Коммит (`Commit`): атомарная единица истории — неизменяемый снимок состояния всех файлов на момент сохранения; содержит:

  - уникальный идентификатор (`SHA-1 хеш`);

  - ссылку на родительский коммит(ы);

  - автора;

  - дату создания;

  - сообщение (`commit message`), описывающее изменения;

- Тег (`Tag`): статическая именованная ссылка на конкретный коммит; используется для маркировки релизов (например, `v1.0.0.0`, `v2.7.14.127`);

- Ветка (`Branch`): подвижная именованная ссылка на коммит; при создании нового коммита в ветке она автоматически перемещается на него; ветки изолируют потоки разработки; стандартное название основной ветки — `main`.