-
1. Вступ
- 1.1 Про систему контролю версій
- 1.2 Коротка історія Git
- 1.3 Основи Git
- 1.4 Git, зазвичай, тільки додає дані
- 1.5 Три стани
- 1.6 Командний рядок
- 1.7 Інсталяція Git
- 1.8 Початкове налаштування Git
- 1.9 Отримання допомоги
- 1.10 Підсумок
-
2. Основи Git
- 2.1 Створення Git-репозиторія
- 2.2 Запис змін до репозиторія
- 2.3 Перегляд історії комітів
- 2.4 Скасування речей
- 2.5 Взаємодія з віддаленими сховищами
- 2.6 Теґування
- 2.7 Псевдоніми Git
- 2.8 Підсумок
-
3. Галуження в git
- 3.1 Гілки у кількох словах
- 3.2 Основи галуження та зливання
- 3.3 Управління гілками
- 3.4 Процеси роботи з гілками
- 3.5 Віддалені гілки
- 3.6 Перебазовування
- 3.7 Підсумок
-
4. Git на сервері
- 4.1 Протоколи
- 4.2 Отримання Git на сервері
- 4.3 Генерація вашого публічного ключа SSH
- 4.4 Налаштування Серверу
- 4.5 Демон Git
- 4.6 Розумний HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Варіанти стороннього хостингу
- 4.10 Підсумок
-
5. Розподілений Git
-
6. GitHub
-
7. Інструменти Git
- 7.1 Вибір ревізій
- 7.2 Інтерактивне індексування
- 7.3 Ховання та чищення
- 7.4 Підписання праці
- 7.5 Пошук
- 7.6 Переписування історії
- 7.7 Усвідомлення скидання (reset)
- 7.8 Складне злиття
- 7.9 Rerere
- 7.10 Зневадження з Git
- 7.11 Підмодулі
- 7.12 Пакування
- 7.13 Заміна
- 7.14 Збереження посвідчення (credential)
- 7.15 Підсумок
-
8. Налаштування Git
-
9. Git and Other Systems
- 9.1 Git як клієнт
- 9.2 Міграція на Git
- 9.3 Підсумок
-
10. Git зсередини
- 10.1 Кухонні та парадні команди
- 10.2 Об’єкти Git
- 10.3 Посилання Git
- 10.4 Файли пакунки
- 10.5 Специфікація посилань (refspec)
- 10.6 Протоколи передачі
- 10.7 Супроводження та відновлення даних
- 10.8 Змінні середовища
- 10.9 Підсумок
-
A1. Додаток A: Git в інших середовищах
- A1.1 Графічні інтерфейси
- A1.2 Git у Visual Studio
- A1.3 Git в Eclipse
- A1.4 Git у Bash
- A1.5 Git у Zsh
- A1.6 Git у Powershell
- A1.7 Підсумок
-
A2. Додаток B: Вбудовування Git у ваші застосунки
- A2.1 Git з командного рядка
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
-
A3. Додаток C: Команди Git
- A3.1 Налаштування та конфігурація
- A3.2 Отримання та створення проектів
- A3.3 Базове збереження відбитків
- A3.4 Галуження та зливання
- A3.5 Поширення й оновлення проектів
- A3.6 Огляд та порівняння
- A3.7 Зневаджування
- A3.8 Латання (patching)
- A3.9 Електронна пошта
- A3.10 Зовнішні системи
- A3.11 Адміністрування
- A3.12 Кухонні команди
10.1 Git зсередини - Кухонні та парадні команди
Можливо, ви перейшли сюди після одного з перших розділів, а може й після послідовного вивчення всієї книжки до цього місця — у будь-якому разі, саме тут ми перейдемо до внутрішніх процесів та реалізації Git. Ми дійшли висновку, що розуміння цієї інформації було принципово важливим для усвідомлення того, наскільки Git є корисним та потужним, та інші сперечалися з нами, кажучи, що це може збивати з пантелику початківців та бути для них надміру складним. Тому ми зробили це обговорення останнім розділом книги, щоб рано чи пізно ви могли прочитати його під час навчального процесу. Лишаємо це на ваш розсуд.
А тепер, розпочнімо. По-перше, якщо це досі не стало зрозумілим, Git — контентно-адресована (асоціативна) файлова система із надбудовою у вигляді користувацького інтерфейсу СКВ. За мить ви дізнаєтеся більше про те, що це одначає.
У час раннього становлення Git (переважно до версії 1.5), користувацький інтерфейс був значно складнішим, бо він більше підкреслював цю файлову систему, аніж зручність СКВ. Протягом останніх кількох років користувацький інтерфейс вдосконалювався і став простим та зрозумілим у використанні; втім, досі зустрічається стереотип щодо раннього інтерфейсу Git, який був складним і тяжким для вивчення.
Шар асоціативної файлової системи неймовірно крутий, тож ми охопимо його першим у цьому розділі; потім ви дізнаєтеся про механізми передачі та завдання з обслуговування репозиторія, з якими вам можете знадобитися коли-небудь мати справу.
Кухонні та парадні команди
Ця книга переважно розповідає про використання 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
містить клієнтські та серверні гаки, які були детальніше розглянуті у розділі Гаки (hooks) Git.
Лишилися ще чотири важливі елементи: файли HEAD
та (ще не створений) index
, і теки objects
та refs
.
Це основні складові Git.
У теці objects
зберігається увесь вміст вашої бази даних, тека refs
містить вказівники на об’єкти комітів у цих даних (гілки, теґи, віддалені гілки тощо), файл HEAD
указує на поточну гілку — на яку ви зараз переключені, а у файлі index
зберігається вміст індексу.
Тепер ми детально розберемося з цими елементами, щоб зрозуміти як працює Git.