Ця книга переважно розповідає про використання Git за допомогою близько трьох десятків підкоманд на кшталт checkout
, branch
, remote
.
Та оскільки Git спершу був більше інструментом для системи керування версіями, ніж повною СКВ з дружнім інтерфейсом, існує купа підкоманд, що здійснюють низькорівневу роботу і були створені для послідовного використання у стилі UNIX або використання у скриптах.
Ці команди зазвичай називають кухонними'' (англійський термін
plumbing'' — трубопровід, сантехніка), а орієнтовані на користувача — парадними'' (англійський термін
porcelain'' — порцелянові).
Як ви вже напевно помітили, перші дев’ять розділів книги були присвячені переважно парадним командам. У цьому розділі розглядатимуться саме низькорівневі кухонні команди, які дають доступ до внутрішніх процесів Git, та допомогають продемонструвати як і чому Git працює саме так, а не інакше. Багато з цих команд призначені не для ручного використання з командного рядка, а є блоками для побудови нових інструментів та користувацьких скриптів.
Коли ви виконуєте git init
у новій чи існуючій теці, Git створює теку .git
, де знаходиться майже все, що Git зберігає і чим оперує.
Якщо ви бажаєте зробити резервну копію чи клон свого репозиторія, копіювання лише цієї теки в інше місце дає вам майже все, що необхідно.
Поточний розділ присвячений вмісту цієї теки.
Зазвичай щойно створена тека .git
має такий вигляд:
$ ls -F1
config
description
HEAD
hooks/
info/
objects/
refs/
Залежно від версії Git, там може бути ще щось, та вищенаведений приклад є свіжим репозиторієм — це те, що ви типово бачитимете безпосередньо після виконання git init
.
Файл description
використовується тільки програмою GitWeb, не звертайте на нього увагу.
Файл config
містить конфігураційні параметри, специфічні саме для конкретного репозиторія, а в теці info
знаходиться файл з глобальними налаштуваннями ігнорування файлів — він дозволяє виключити шляхи, які ви не бажаєте додавати у файл .gitignore
.
Тека hooks
містить клієнтські та серверні гаки, які були детальніше розглянуті у розділі ch08-customizing-git.asc.
Лишилися ще чотири важливі елементи: файли HEAD
та (ще не створений) index
, і теки objects
та refs
.
Це основні складові Git.
У теці objects
зберігається увесь вміст вашої бази даних, тека refs
містить вказівники на об’єкти комітів у цих даних (гілки, теґи, віддалені гілки тощо), файл HEAD
указує на поточну гілку — на яку ви зараз переключені, а у файлі index
зберігається вміст індексу.
Тепер ми детально розберемося з цими елементами, щоб зрозуміти як працює Git.