Репозиторій та історія

Оглядач об’єктів

Git має репутацію складного. Майже вся вона походить із того, що модель ніколи не показують: чотири види об’єктів і вказівники. Щойно ви зможете клацнути коміт, потрапити на його дерево і виявити, що ваш файл є блобом, якому ім’я дало дерево, порцеляна перестане бути магією.

⌘K → Оглядач об’єктів. Ніщо на цій сторінці не може змінити жодного байта — кожен виклик за нею це читання.

Поля коміта, з його деревом і батьками у вигляді посилань, поруч зі списком рефів

Чотири об’єкти

Об’єкт Це Знає
blob Вміст файлу Нічого. Ні свого імені, ні шляху, ні історії
tree Перелік каталогу Імена, режими і sha кожного дочірнього блоба чи дерева
commit Один знімок Своє дерево, своїх батьків, автора, комітера, повідомлення
tag Анотований тег Об’єкт, на який вказує, того, хто теґував, і повідомлення

Найбільша несподіванка для більшості — перший рядок. У блоба немає імені. Два файли з однаковим вмістом будь-де у вашій історії — це той самий блоб, збережений один раз. Ім’я живе в дереві, яке на нього вказує — саме тому git відстежує вміст, а не файли, і саме тому перейменування виявляються, а не записуються.

Реф — refs/heads/main, refs/tags/v1.0, HEAD — це просто файл, що містить sha. Ось і вся «дешевизна гілкування».

Прогулянка

Ліва колонка перелічує кожен реф у репозиторії, згрупований так, як групує їх git. Клацніть на будь-якому, щоб потрапити на об’єкт, який він називає.

Далі все є посиланням:

  • Коміт показує своє tree і кожного parent — переходьте до знімка або назад по історії, по одному коміту за раз.
  • Дерево перелічує свої записи з режимом, типом, sha і розміром. Клацніть на імені, щоб відкрити дитину.
  • Блоб показує свій текст (початок, якщо він великий) або прямо каже, що він бінарний.
  • Анотований тег показує, на що він вказує — переходьте до коміта.

Назад повертає вас вашими ж кроками.

Введення ревізії

Поле приймає все, що приймає git rev-parse, і саме тут це перестає бути браузером і стає способом вчитися:

Введіть це Щоб отримати
HEAD Поточний коміт
HEAD~3 Три коміти назад
HEAD^{tree} Дерево того коміта, очищене
HEAD:src/app.ts Блоб для того шляху, напряму
v1.0^{} Те, на що вказує анотований тег, а не сам об’єкт тега
a1b2c3d Будь-який об’єкт за sha — скорочення працюють

Цифри режиму в переліку дерева варто знати: 100644 — файл, 100755 — виконуваний, 040000 — піддерево, 120000 — символічне посилання, 160000 — gitlink підмодуля; останнє і є всім, що зберігає підмодуль.

Обмеження, про які варто знати

  • Лише читання, і це навмисно. Тут нема чим писати. Створення об’єктів руками — це вправа з git hash-object, і їй місце в терміналі.
  • Великі блоби обрізаються після перших 200 КБ — досить, щоб побачити, що це, і недосить, щоб підвісити вікно.
  • Розміри — це розмір вмісту об’єкта, як його повідомляє git cat-file -s, а не те, скільки він коштує на диску після пакування. Про це див. обслуговування.
  • Недосяжні об’єкти — теж об’єкти. Вставте sha зі звіту git fsck про висячі об’єкти, і він відкриється; часто це найшвидший спосіб побачити, що містив загублений коміт, перш ніж вирішувати, чи відновлювати його.

Дивіться також: Граф · Обслуговування репозиторію · Відновлення

Покращити цей переклад на GitHub