Git: установка, настройка, инициализация репозитория

Это первая статья из цикла публикаций о git. В этой серии постов мы делаем особый упор на логику работу с git, будет много логических схем, скриншотов и теории работы гита под капотом, например вы узнаете, как git интерпретирует директории и файлы, что такое указатели, коммиты, ветки.

Цель этой серии публикаций — дать практические навыки работы с git в терминале, что позволит вам всегда ориентироваться в версиях вашего проекта вне зависимости от окружения, которое вы используете для разработки. Поехали, сначала разберемся в том, что такое git и зачем он нужен.

Что такое Git?

Git — это распределенная система управления версиями, которая устанавливается на машину, где будет вестись работа над проектом. Грубо говоря, git — это софт, который можно скачать отсюда и установить на Linux, Windows или MacOS. В некоторых дистрибутивах Linux, git уже предустановлен, например, в Ubuntu 18/20/22.

Кстати, git был разработан Линусом Торвальдсом, чтобы решить проблему командной разработки ядра Linux. Основная проблема командной разработки больших проектов в том, что со временем становится очень сложно менеджерить процессы добавления нового кода в проект, так же как и тестировать его или отлавливать баги.

Git был изначально разработан с целью решить все эти проблемы. С течением времени он оброс новыми функциями, фишками и сейчас без него сложно представить разработку крупных проектов. Вот основные функции и возможности git:

  • Управление различными версиями проекта;
  • Создание и управление разными ветвями развития проекта;
  • Откат к предыдущим версиям проекта;
  • Быстрое клонирование проектов с удаленных git-серверов.

Надо сказать, что git — это не единственная система контроля версий. Есть еще Mercurial, Team Foundation Server, SVN и прочие решения, но все они сильно уступают в популярности git. В основном из-за того, что многие крупные IT-корпорации поддерживают и развивают git. Например, Microsoft, которой принадлежит gitHUB.

Если сейчас вам не совсем ясно что же такое git — не переживайте, в процессе прочтения статьи всё прояснится. Перейдем от слов к практике и пощупаем git вживую.

Работа с git: установка, настройка, создание репозитория

Как мы сказали ранее, git — это софт, который нужно установить на машину, где будет вестись разработка и настроить его. Прежде чем качать git — нужно проверить командой git --version текущую версию установленных пакетов, если ваша версия git сильно устарела, например наша версия git на Ubuntu 18 была 2.17+ (2.39 — актуальная версия), — ее следует обновить.

Установка и обновление git

Git можно установить на все популярные десктопные ОС: Windows, Linux, MacOS. В Ubuntu достаточно выполнить уже привычный многим набор команд: apt update && apt install -y git. Если git уже установлен, но версия устарела — обновить git можно так:

  1. Скачайте репозиторий с исходниками git: git clone https://github.com/git/git;
  2. Обновите apt-репозиторий: apt update;
  3. Скачайте набор пакетов, необходимых для сборки GIT из исходников:
    1. sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev \ gettext libz-dev libssl-dev;
    2. sudo apt-get install asciidoc xmlto docbook2x;
    3. sudo apt-get install install-info.
  4. Сделайте симлинк: sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi.
  5. Перейдите в скачанный репозиторий командой cd и выполните следующий набор команд:
    1. make configure;
    2. ./configure --prefix=/usr;
    3. make all doc info;
    4. sudo make install install-doc install-html install-info.

Ещё раз выполните команду git --version, чтобы убедиться, что git успешно обновился. Теперь можно двигаться дальше и настроить git для работы.

Настройка git

В git есть множество сущностей, одна из которых — это коммит. Коммит сохраняет разность между предыдущим сохранением и новым сохранением. При сохранении коммита записываются мета-данные — информация о том, кто сделал коммит: имя автора и электронная почта. Эти данные очень важны в командной работе, они позволяют точно идентифицировать того, кто сделал коммит.

Настройка имени и электронной почты участника команды производится локально через консоль командами:

  • git config --global user.name [имя пользователя];
  • git config --global user.email [электронная почта пользователя].

Если имя пользователя задается с пробелом (Имя Фамилия) — тогда его необходимо указывать в двойных кавычках, электронная почта всегда задается без кавычек. При вводе электронной почты и имени пользователя git не возвращает никакого ответа, чтобы убедиться в правильности введенных данных можно выполнить команду: git config --list.

Помимо настройки имени пользователя и электронной почты в конфигурационном файле git можно указать множество других настроек, таких как: шаблон коммита, текстовый редактор коммита, настройка ветки по умолчанию и многое другое. Некоторые из этих параметров мы рассмотрим далее, а пока давайте переходить к главному — созданию репозитория.

Инициализация репозитория

Инициализация или создание репозитория производится командой git init в директории проекта, при этом директория как может содержать файлы проекта, так и может быть пустой. При вызове команды git init вы увидите следующее сообщение:

Тут следует обратить внимание на несколько важных вещей:

  • По умолчанию git создаёт ветку master, где будут размещаться коммиты. В gitHUB же дефолтная ветка называется main — несоответствие веток может привести к проблемам в будущем, лучше сразу переименовать ветку master в main;
  • Задать имя дефолтной ветки можно с помощью команды git config --global init.defaultBranch main, где main — название ветки. Эта команда работает до создания первого коммита;
  • Переименовать уже существующую ветку можно командой git branch -m [название ветки].

При инициализации репозитория в директории проекта будет создана скрытая поддиректория .git, которая содержит различные сущности git и информацию о репозитории:

Тут мы сделаем небольшое, но очень важное отступление и расскажем, какие существуют области видимости в git или говоря простыми словами, какие стадии проходят файлы до того, как попадают в репозиторий — становятся частью поддиректории .git.

В git есть три зоны видимости файлов:

Первая зона видимости: рабочая директория (Working directory) — это директория, содержащая файлы проекта. Просмотреть все файлы в директории можно командой ls -la.

Вторая зона видимости: индекс (Staging area) — это виртуальная зона, где фиксируются изменения внесенные в файлы проекта перед тем, как они будут сохранены (закоммичены). Посмотреть, какие изменения содержатся в индексе можно командой git status.

Третья зона видимости: репозиторий (Repository) — это сохраненные изменения, попавшие в директорию .git после коммита. В этой зоне содержатся различные git-объекты. Напрямую с ними взаимодействовать нельзя.

Отметим, что просто инициализировать репозиторий в директории проекта недостаточно для того, чтобы изменения в файлах проекта начали индексироваться. Файлы для индексации нужно указывать вручную.

Добавление файлов в индекс

Добавить все файлы и подкаталоги проекта в индекс можно командой git add ., затем командой git status можно посмотреть, какие файлы и изменения подготовлены для коммита:

Git сам отслеживает внесенные вами изменения в файлы и директории, но подготовить их к коммиту надо вручную. Если вы после того как выполнили команду git add . внесли изменения в файлы, то они не будут учтены, команда git status отразит следующее:

На этом скрине красным выделены два действия с файлами, которые пока ещё не попали в индекс: 1) Внесение изменений в файл main.py; 2) Переименование файла modules.md в python_modules.md. Отметим, что старый файл modules.md помечен теперь, как удаленный, а вот новый файл python_modules.md вообще гитом не трекается — его нужно добавить в индекс командой git add python_modules.md.

Теперь, когда мы отправили все изменения в индекс — их можно сохранять в репозиторий. Перед переходом к следующему разделу, вкратце пройдемся по основным командам и действиям при установке, настройке и инициализации репозитория.

Кратко о GIT и его базовых настройках и командах

GIT — это система управления версиями, которая входит в многие популярные дистрибутивы Linux, например, Ubuntu 16+. Если в вашей сборке Linux нет гита из коробки, его всегда можно установить из apt (там будет не самая свежая версия) или скачать исходники с официального сайта git и скомпилировать их, как указано в нашей инструкции. Проверить версию git можно командой git --version, если git установлен корректно и версия отражается — можно переходить к созданию репозитория.

Репозиторий git — это скрытая директория .git в папке вашего проекта, где хранятся специальные git-объекты, описывающие состояние файлов и директорий вашего проекта во времени. Каждый раз, когда вы делаете коммит — вы сохраняете состояние файлов и директорий вашего проекта в git. Инициализируется или создается Git-репозиторий командой git init. После инициализации репозитория в него можно добавлять файлы для индексации.

В git есть три зоны видимости файлов:

  1. Рабочая директория проекта — это видимая зона, где отражаются файлы вашего проекта в текущем коммите, если вы удалили файл и сделали коммит, то в текущем времени его больше не будет, но если откатится на предыдущий коммит, то файл там будет, так как GIT сохраняет файлы целиком;
  2. Индекс или стейджинг — это невидимая зона, туда сохраняются подготовленные к коммиту изменения. Добавляются изменения в индекс командой git add .. Просмотреть изменения можно командой git status, а отправляются изменения в репозиторий командой git commit -m «комментарий»;
  3. Репозиторий — это скрытая директория .git, где в бинарном виде хранятся копии файлов и директорий. Они находятся в директории .git/objects/… Прочитать их простой командой типа cat не выйдет, для этого используется команда git cat-file -p [hash git-object].

Краткая логическая схема работы с git-репозиторием может выглядеть так:

Коммит — это одна из базовых сущностей git. Коммиты позволяют перемещаться по разным версиям проекта. Другая организационная единица git — это ветви. Ветви позволяют логически разделять направления разработки. О коммите и ветвях мы подробно поговорим в нашей следующей статье.

Ещё одной фишкой гита является возможность быстро скачивать уже существующие репозитории с gitHUB на сервер, работать над ними и загружать обратно, часто для такой работы требуются сторонние библиотеки и модули. Для такой работы удобнее всего использовать VPS с подключением по SSH, например, от 1cloud.