Что такое Git: как создать локальный репозиторий и что делает git init
Git — система контроля версий, которая позволяет фиксировать изменения кода, экспериментировать с ним без риска и эффективно работать в команде. Изучение Git — обязательный навык для любого разработчика, сравнимый с умением писать чистый код. Он обеспечивает надежное хранение истории проекта и становится фундаментом для профессионального роста в IT.

В Git работают не только с кодом, но и с технической документацией, статьями, базами знаний, мануалами и инструкциями. Мы будем рассматривать Git при работе именно с кодом.
В статье расскажем, что такое Git, где и когда он применяется, как устроена работа с разными версиями, какие инструменты и команды использовать для работы.
Основные концепции Git
В этом разделе рассмотрим, как именно работает Git, какие элементы в нем есть, а также на чем базируется децентрализованных подход к изменениям.
Принципы работы с Git
Git — это распределенная система контроля версий, которая помогает отслеживать изменения в коде.
Чтобы понять, насколько Git удобная вещь, предлагаем представить стандартный текстовый файл. Вы там что-то пишете, код или обычный текст — не так важно. Вы закончили работу и хотите поделиться файлом с Петей, чтобы он взял в работу другой фрагмент. Для этого вы сохраняете файл, даете ему название, скидываете Пете. Тот что-то делает, пересылает вам обратно уже для того, чтобы с изменениями ознакомились вы. Вы вносите корректировки и отправляете файл кому-то еще.
Предположим, текстовый файл пересылается между несколькими разработчиками, каждый из которых вносит свои изменения. В документе множатся комментарии, становится непонятно, кто какие изменения внес. В конце все понимают, что надо откатиться к версии, которую еще на второй итерации выдал Петя. С этих пор документ прошел пятнадцать итераций исправлений, Петя уже не помнит, как называется файл с нужной версией, и судорожно ищет его в ворохе документов.
Git решает эту проблему. Неважно, в какой IDE вы работаете — каждый разработчик может спокойно работать со своим кодом, смотреть версии коллег. По необходимости объединять их, именовать, возвращаться к предыдущим версиям без отката изменений в версии, над которой идет работа сейчас. Все версии объединены в удобные группы и отображены последовательно, что позволяет отслеживать историю изменений.

 Система контроля версий сохраняет записи обо всех изменениях в файлах
Система контроля версий сохраняет записи обо всех изменениях в файлахТеперь посмотрим, какие компоненты и процессы есть в Git и как они обеспечивают контроль над версиями.
Репозиторий (repository) — хранилище вашего проекта, в котором сохранена история всех изменений. У каждого разработчика, который работает над конкретным проектом, есть полная копия его репозитория, она размещена локально у каждого на устройстве. Еще есть публичный репозиторий. Он доступен всем разработчикам, служит для обмена версиями и расположен на сервере, например GitHub или GitLab.
Коммит (commit) — это фиксация изменений в репозитории. По сути, это снимок состояния файлов в определенный момент, который сохраняется в истории.
В каждом коммите есть:
- Уникальный хеш-идентификатор, например, a1b2c3d... 
- Описание изменений, каждый разработчик пишет его самостоятельно. Так другие в команде поймут, чем конкретная версия отличается от других. 
- Автор и временная метка. Иначе говоря, информация о том, кто и когда внес изменения. 
- Ссылка на родительский коммит. Так выстраивается история версий, можно отследить, какое изменение за каким следовало. 
Чтобы понять, как создаются коммиты, важно знать о трех состояниях файлов в Git:
- Рабочая директория (working directory) — текущее состояние файлов в папке проекта. Именно тут вы вносите все изменения. 
- Индекс (staging area) — промежуточная область, куда командой git add добавляете файлы, чтобы включить их в следующий коммит. 
- Репозиторий (repository) — окончательное хранилище. Когда вы создаете коммит (git commit), то навсегда сохраняете содержимое индекса. 
Ветви (branches) — независимая линия разработки, которая отделяется от основной. По умолчанию основная ветка называется main, ранее был вариант master. Грубо говоря, ветка — указатель на конкретные коммиты. В ветках идет работа над дополнительными функциями проекта или другими версиями, при этом основная линия разработки на ветке main остается нетронутой.
HEAD — указатель, который показывает, на какой ветке или коммите вы находитесь.
Слияние (merge) — объединение изменений из разных веток. Например, когда функция готова, ее ветку сливают с main, чтобы добавить новую фичу в основной проект.
 Ветвистая структура репозитория. Коммиты в главной ветке main удобно помечать номером версии, чтобы не запутаться. Develop — ветка разработки, в которой разрабатывают новый функционал.
Ветвистая структура репозитория. Коммиты в главной ветке main удобно помечать номером версии, чтобы не запутаться. Develop — ветка разработки, в которой разрабатывают новый функционал. Feature — также ветки для разработки новых функций. Они ответвляются от Develop, а готовые ветки Feature с Develop, наоборот, сливаются.
Feature — также ветки для разработки новых функций. Они ответвляются от Develop, а готовые ветки Feature с Develop, наоборот, сливаются. Децентрализованный подход к хранению данных
В отличие от централизованных систем (как SVN), где единый сервер с историей, Git работает по распределенной, или децентрализованной модели хранения данных. Это значит, что нет какого-то единого сервера с историей, нет единой точки отказа. Если у одного из разработчиков сгорел диск, работу остальных это не затронет.
В чем еще преимущества децентрализованного подхода:
- На устройстве каждого разработчика локально хранится «боевой» репозиторий, а не его копия. Чтобы добавить новые коммиты, не нужен интернет — достаточно, что репозиторий уже находится на устройстве. 
- Операции проводятся мгновенно, так как репозиторий сохранен локально, а не где-то на сервере. Например, вы можете быстро посмотреть логи, сравнить разные версии или создать новую ветку, даже если есть перебои с сетью. 
 Если один из серверов упадет, для продолжения работы и восстановления данных можно скопировать репозиторий из любого другого устройства. Копия репозитория на каждом устройстве — полный бэкап всех данных.
Если один из серверов упадет, для продолжения работы и восстановления данных можно скопировать репозиторий из любого другого устройства. Копия репозитория на каждом устройстве — полный бэкап всех данных.Как это работает на практике
Разработчики кодят в своих локальных репозиториях, потом синхронизируют изменения через удаленные репозитории: на GitHub или GitLab. Тот репозиторий, который хранится на GitHub или GitLab, это не основная версия, а просто точка синхронизации, там все обмениваются результатами своей работы. Но у каждого на устройстве есть одинаково равнозначные репозитории. Это создает гибкий воркфлоу, где можно экспериментировать без риска повредить общий код.
Git в современных DevOps-практиках и контейнерных окружениях
В современной разработке Git тесно интегрирован с автоматизированными процессами CI/CD (Continuous Integration/Continuous Deployment). Коммиты в Git-репозиторий могут автоматически запускать сборку приложений, тестирование и развертывание в продакшен. Особенно актуально это для контейнерных приложений, где каждое изменение кода автоматически упаковывается в Docker-образ и разворачивается в кластерах Kubernetes.
Для управления контейнерными приложениями на основе Git-репозиториев используются специализированные облачные решения. Например, Evolution Managed Kubernetes позволяет за минуты создавать кластеры для автоматического развертывания контейнеров, настраивать CI/CD-пайплайны с интеграцией Git-хостингов и управлять всей инфраструктурой через API или kubectl. Такой подход обеспечивает полную автоматизацию: от коммита разработчика до запуска обновленного приложения в кластере.

Установка Git
Дадим пошаговые инструкции, как установить Git на операционные системы Linux, macOS и Windows.
Установка на Linux
Для Linux приводим команды, которые нужны для установки Git из официальных репозиториев. Установку будем рассматривать на примере дистрибутивов на базе Debian/Ubuntu и RHEL/CentOS.
Для дистрибутивов на основе Debian/Ubuntu:
Для дистрибутивов на основе RHEL/CentOS/Fedora:
Проверить установку:
Установка на MacOS
Здесь расскажем, как установить Git на устройство с MacOS. Рассмотрим три способа: через менеджер пакетов Homebrew, инструменты Xcode Command Line Tools или официальный сайт с бинарным установщиком.
1. Выполните команду в Homebrew (рекомендуемый способ установки):
2. Выполните в Xcode Command Line Tools:
3. Скачайте установщик для MacOS с официального сайта Git из раздела Downloads.
 На портале Git вы можете выбрать, для какой ОС скачать установщик, загрузить более старые версии и узнать, какая версия последняя на данных момент. Источник: git-scm.com
На портале Git вы можете выбрать, для какой ОС скачать установщик, загрузить более старые версии и узнать, какая версия последняя на данных момент. Источник: git-scm.comЧтобы проверить установку, выполните:
Установка на Windows
Опишем установку с использованием Git for Windows — официального установщика, который включает Git Bash и инструменты командной строки.
- Скачайте установщик с портала Git. 
- Запустите установщик и следуйте инструкциям. 
- Выберите нужные компоненты. Советуем все оставить по умолчанию. 
- Настройте переменные PATH — выберите «Git from the command line and also from 3rd-party software». 
- Завершите установку. 
Чтобы проверить, все ли скачалось, введите команду:
Быстрая настройка Git
Первичная конфигурация
Для всех операционных систем первые настройки одинаковые. Нужно указать ваше имя и задать адрес электронной почты:
Исправление настроек по умолчанию
После того, как вы задали имя пользователя и почту, полезно поменять некоторые базовые настройки. Так работа с Git станет удобнее, особенно если ведете совместную работу над проектами. Рассказываем о некоторых командах, которые помогут в работе.
1. Настройка ветки по умолчанию:
В современных версиях Git, начиная с 2.28, ветка по умолчанию уже создается с именем main. Но явная настройка — это best practice, которая обеспечивает предсказуемость и совместимость во всех окружениях. К примеру, платформы вроде GitHub и GitLab по умолчанию создают репозитории с веткой main.
Если вы настроите ветку по умолчанию, это станет гарантией, что ваша среда сразу синхронизируется с удаленной, и не нужно будет ничего переименовывать.
2. Автоматическое переключение между ветками:
3. Настройка поведения push:
4. Кеширование:
5. Изменение цветового оформления Git для удобства:
6. Настройка редактора по умолчанию:
7. Просмотр всех настроек:
Создание локального репозитория
Локальный репозиторий — это полная копия вашего проекта со всей историей изменений, которая хранится на вашем компьютере. Все операции в Git выполняются локально, и только после этого изменения подгружаются на общий удаленный сервер.
Тут расскажем, как создать у себя локальный репозиторий с помощью git init в новом и уже существующем проекте.
Использование команды git init
Команда git init создает новый репозиторий Git в текущей директории. Что происходит при выполнении:
- Создается скрытая папка .git в корне проекта. 
- В папке размещаются все служебные файлы Git: объекты, конфигурация, история. 
- Директория превращается в репозиторий, который готов отслеживать изменения. 
Создание репозитория в новом и существующем проекте
Чтобы создать репозиторий в новом проекте, выполните в терминале:
Для создания репозитория в уже существующем проекте алгоритм будет несколько другим:
Далее нужно проверить результат:
Основы работы в репозитории
Перейдем к основам работы в репозитории. В этом разделе рассмотрим, как сохранять изменения с помощью git add и git commit, а также кратко обсудим графические инструменты (GUI) для работы с Git.
Индексация и фиксация изменений
В Git, чтобы сохранить внесенные изменения, нужно выполнить два шага: индексацию и фиксацию.
Индексация (git add)
Перед тем как зафиксировать изменения, нужно добавить файлы в область подготовленных файлов (staging area). Это позволяет контролировать, какие изменения попадут в следующий коммит.
Фиксация (git commit)
После индексации изменения фиксируются в репозитории с помощью коммита. Каждый коммит имеет уникальный идентификатор и сообщение, которое описывает внесенные изменения.
Кратко описываем алгоритм работы с изменениями:
- Вносите изменения в файлы. 
- Через git add подготавливаете файлы к коммиту. 
- Через git commit фиксируете изменения в истории. 
- И дальше повторяете этот цикл. 
Визуальные инструменты для работы с Git
Многие работают с Git через терминал. Но чтобы визуализировать историю изменений и упростить себе работу над операциями, можно использовать графические клиенты (GUI). Расскажем о некоторых популярных вариантах.
Sourcetree
Бесплатное решение, которое работает на устройствах с Windows и macOS. Доступна визуализация истории веток, интеграция с Bitbucket и Jira, поддержка Git-flow «из коробки». Хороший выбор, если ищете полнофункциональный бесплатный инструмент и используете другие продукты Atlassian, например, Jira.
 Интерфейс Sourcetree
Интерфейс SourcetreeGitKraken Desktop
Есть мощный граф коммитов, встроенные инструменты для слияния. В интерфейсе фокус на командной работе, доступна интеграция с популярными хостингами. Подойдет тем, кто работает в команде и ценит детальную визуализацию истории проекта, особенно при работе со сложными ветвлениями. Работает на Windows, macOS и Linux.
GitHub Desktop
У GUI минималистичный интерфейс, есть интеграция с GitHub, для основных рабочих операций процесс выстроен интуитивно понятно. Подходит для новичков или тех, кто в работает с GitHub, хочет понятный интерфейс для повседневных задач. Функционал бесплатный, работает на Windows и macOS.
При этом все современные IDE работают с Git из коробки. Если вы работаете, например, в VS Code, IntellyJ, NetBeans, PyCharm или Eclipse, GUI вам может и не понадобиться.
Заключение
С Git можно создавать репозитории, индексировать изменения, формировать коммиты и работать с ветками. Локальная работа в Git дает контроль над историей проекта, позволяет экспериментировать без риска для общей кодовой базы.
Закончим подборкой советов для дальнейшего изучения Git:
- Освойте интерактивный режим. Используйте git add -p для выборочной индексации изменений и git rebase -i, чтобы редактировать историю коммитов. 
- Изучите отладку, например: команды git bisect для поиска проблемных коммитов и git blame для отслеживания авторов изменений. 
- Попрактикуйтесь с ветвлением. Отработайте стратегии Git Flow и GitHub Flow на своих пет-проектах. 
- Обратитесь к Pro Git Book — это бесплатное пособие по Git на русском языке. В меню слева вы сможете выбрать другой язык: английский, французский, китайский или любой другой из доступных. Из книги вы узнаете, например, про работу с протоколами, что такое Git-демон, изучите более глубокие и точечные настройки. 
