Основы

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

Состояния

С точки зрения Git, у файлов может быть 3 состояния:

  • Committed - файл хранится в базе данных
  • Modified - файл изменен, но не перемещен в базу данных
  • Staged - файл отмечен для помещения в базу данных

Git-проект можно условно разделить на 3 части:

  1. Рабочая директория - это распакованный снимок версии проекта. Эти файлы извлекаются из базы данных в рабочую директорию для того, чтобы можно было с ними работать.
  2. Staging область (индекс) - файлы, отмеченные для следующего коммита. Обычно содержатся в директории Git.
  3. Репозиторий (Git-директория или база данных) - наиболее значимая часть системы. В неё входят метаданные и объекты базы данных вашего проекта. Когда клонируется репозиторий с другого компьютера, копируется эта часть.

Рабочий процесс

Рабочий процесс обычно выглядит так.

  • Файлы из рабочей директории модифицируются.
  • Добавляются файлы в stage область. В момент добавления в индекс переносится копия файлов на данный момент времени. Эта копия будет загружена при следующем коммите.
  • Происходит коммит, при этом берутся файлы из stage области, и в Git директории создается снимок, который останется там навсегда.

Хранение

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

Принцип локальности

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

Целостность

В основе проверки корректности файлов лежит принцип хеширования. Для каждого файла формируется SHA-1 хеш, поэтому невозможна ситуация, когда из-за сбоя сети загрузится битый файл и вы об этом не узнаете. Аналогичным способом Git узнает о каждом изменении в файле.

Информация хранится вечно

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

Источник – bxnotes
Редактировать на GitHub