Статьи

Какие три дерева в Git?

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

В серии курсов Git по Envato Tuts + я объяснил некоторые основные концепции Git, все они проиллюстрированы полезной анимацией.

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

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

Для процесса добавления и получения коммитов Git использует три разные версии файлов:

  1. рабочий каталог
  2. индекс
  3. что называется «HEAD» для создания и получения коммитов
Три Деревья

У каждого из этих деревьев есть разные задания: одно дерево для записи изменений, одно дерево для их внесения и одно для указания на ваш последний коммит на ветке в вашем репозитории Git.

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

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

Рабочий каталог представляет собой фактические файлы в файловой системе вашего компьютера, которые доступны вашему редактору кода для применения изменений. Рабочий каталог — это версия определенного коммита, особый снимок проекта, который вы извлекли. Это версия вашей истории Git, на которую указывает HEAD в любой момент.

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

Проверенные файлы в Git

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

HEAD — это часть git, которая указывает на ваши ветви, как и основная ветка по умолчанию. Это ссылка, и у нее довольно простая, но чрезвычайно важная работа. HEAD указывает на текущую извлеченную ветку, а это, в свою очередь, указывает на последний коммит из этой ветви. HEAD может перемещаться не только во времени (когда вы проверяете предыдущие коммиты), но также перемещается, когда вы создаете новые ветви или просто переключаетесь на другие ветви.

Это также точка в вашей истории Git, на которую вы можете поместить свой следующий коммит, родитель для вашего следующего коммита. С каждым новым коммитом он заменяет ссылку на текущую ветку — по умолчанию, главная ветвь, конечно.

Таким образом, по сути, HEAD является ссылкой, которая часто изменяется и указывает на две вещи: саму ветвь и, через нее, последний коммит в этой ветке.

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

Вот пример:

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

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

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

Зеленый список файлов просто означает, что версии промежуточных файлов в индексе отличаются от версий файлов, которые уже были зафиксированы ранее. Когда вы запустите git commit , эти промежуточные файлы будут помещены в новый объект commit. Команда git commit сохранит фактические имена файлов, содержимое каждого файла, информацию об авторе, метаданные и т. Д. В новом объекте.

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

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

Если вы нашли это полезным, почему бы не проверить еще несколько курсов Git?

Вы можете посмотреть наше введение в Git и GitHub или попробовать другие курсы кофе-брейков из этой серии: