GIT

подготовлено редакцией сайта

GIT — это распределенная система управления версиями, которая используется для отслеживания изменений в исходном коде программного обеспечения. С помощью GIT разработчики могут эффективно сотрудничать, отслеживать историю изменений, создавать ветки для разработки новых функций, а также объединять изменения из разных веток.

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

Преимущества систем контроля версий

Есть проект, в котором пишется код. В нём создано окружение GIT — все изменения файлов отслеживаются в рамках настроенных параметров и заданных фильтров. Нужно добавить в проект новую функцию, изменив или доработав существующий код.

programmers

Для этого потребуется создать внутри проекта отдельную ветку — в GIT они называются branch. Работа в этой ветке никак не затрагивает основной код — если с новыми изменениями что-то пойдёт не так и код станет невалидным и перестанет запускаться, основной проект не пострадает. Также в рамках GIT можно объединять разные версии кода в один. Например, над проектом трудится несколько программистов, и каждый разрабатывает или изменяет код в собственных ветках. В конце работы появится необходимость слить ветки вместе — и получается цельная программа. Это значительно облегчает совместную работу, так как не нужно ждать, пока другой разработчик допишет код — можно работать параллельно.

Если же в одной из веток разработка пойдёт не по плану и произойдёт ошибка — всё можно просто откатить до предыдущей ветки в системе контроля версий GIT, где ошибок не было. И начать разработку заново.

programmers

Целостность GIT

В GIT для всего вычисляется хеш-сумма, и только потом происходит сохранение. В дальнейшем обращение к сохранённым объектам происходит по этой хеш-сумме. Это значит, что невозможно изменить содержимое файла или каталога так, чтобы GIT не узнал об этом. Данная функциональность встроена в GIT на низком уровне и является неотъемлемой частью его философии. Вы не потеряете информацию во время её передачи и не получите повреждённый файл без ведома GIT.

programmers

Механизм, которым пользуется GIT при вычислении хеш-сумм, называется SHA-1 хеш. Это строка длиной в 40 шестнадцатеричных символов (0–9 и a–f), она вычисляется на основе содержимого файла или структуры каталога. SHA-1 хеш выглядит примерно так:

Вы будете постоянно встречать хеши в GIT, потому что он использует их повсеместно. На самом деле, GIT сохраняет все объекты в свою базу данных не по имени, а по хеш-сумме содержимого объекта.

Три состояния GIT

У GIT есть три основных состояния, в которых могут находиться ваши файлы: изменён (modified), индексирован (staged) и зафиксирован (committed):

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

Мы подошли к трём основным секциям проекта GIT: рабочая копия (working tree), область индексирования (staging area) и каталог GIT (Git directory).

programmers

Рабочая копия является снимком одной версии проекта. Эти файлы извлекаются из сжатой базы данных в каталоге GIT и помещаются на диск, для того чтобы их можно было использовать или редактировать.

Область индексирования — это файл, обычно находящийся в каталоге GIT, в нём содержится информация о том, что попадёт в следующий коммит. Её техническое название на языке GIT — «индекс», но фраза «область индексирования» также работает.

Каталог GIT — это то место, где GIT хранит метаданные и базу объектов вашего проекта. Это самая важная часть GIT и это та часть, которая копируется при клонировании репозитория с другого компьютера.

Базовый подход в работе с GIT выглядит так:

  1. Изменяете файлы вашей рабочей копии.
  2. Выборочно добавляете в индекс только те изменения, которые должны попасть в следующий коммит.
  3. Когда вы делаете коммит, используются файлы из индекса как есть, и этот снимок сохраняется в ваш каталог GIT.