Сантехника и фарфор
В этой книге было описано, как пользоваться Git’ом, применяя примерно три десятка команд, например, checkout
, branch
, remote
и т.п. Но так как сначала Git был скорее инструментарием для создания СКВ, чем СКВ, удобной для пользователей, в нём полно команд, выполняющих низкоуровневые операции, которые спроектированы так, чтобы их можно было использовать в цепочку в стиле UNIX, а также использовать в сценариях. Эти команды, как правило, называют служебными (“plumbing” — трубопровод), а ориентированные на пользователя называют пользовательскими (“porcelain” — фарфор).
Первые восемь глав книги были посвящены практически только пользовательским командам. В данной главе же рассматриваются именно низкоуровневые служебные команды, дающие контроль над внутренними процессами Git’а и показывающие, как он работает и почему он работает так, а не иначе. Предполагается, что данные команды не будут использоваться напрямую из командной строки, а будут служить в качестве строительных блоков для новых команд и пользовательских сценариев.
Когда вы выполняете git init
в новом или существовавшем ранее каталоге, Git создаёт подкаталог .git
, в котором располагается почти всё, чем он заправляет. Если требуется выполнить резервное копирование или клонирование репозитория, достаточно скопировать всего лишь один этот каталог, чтобы получить почти всё необходимое. И данная глава почти полностью посвящена его содержимому. Вот так он выглядит:
$ ls
HEAD
branches/
config
description
hooks/
index
info/
objects/
refs/
Там могут быть и другие файлы, но непосредственно после git init
вы увидите именно это. Каталог branches
не используется новыми версиями Git’а, а файл description
требуется только программе GitWeb, на них не стоит обращать особого внимания. Файл config
содержит настройки проекта, а каталог info
— файл с глобальным фильтром, игнорирующим те файлы, которые вы не хотите поместить в .gitignore. В каталоге hooks
располагаются клиентские и серверные перехватчики, подробно рассмотренные в главе 7.
Итак, осталось четыре важных элемента: файлы HEAD
, index
и каталоги objects
, refs
. Это ключевые элементы хранилища Git’а. В каталоге objects
находится, собственно, база данных, в refs
— ссылки на объекты коммитов в этой базе (ветки). Файл HEAD
указывает на текущую ветку, и в файле index
хранится информация индекса. В последующих разделах данные элементы будут рассмотрены более подробно.