linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Объектная модель/blob

kb/objects ── Объектная модель ── intermediate

Blob

Объект Git, который хранит содержимое одного файла. Только байты, без имени, прав и даты. Имя файла лежит в `tree`, не в blob.

view as markdownaka: git-blob, blob-object

Blob (binary large object) - самый простой из четырёх типов объектов Git. Содержит только содержимое файла, как последовательность байтов. Не знает ни как файл называется, ни где лежит.

Имя файла, права доступа, путь - всё это хранится в tree-объекте, который ссылается на blob по SHA.

Создание

Через высокоуровневое API - автоматически при git add. Через плумбинг:

bash
echo "содержимое" | git hash-object --stdin -w
# 8d0e41234f24b6da002d962a26c2495ea16a425f

Флаг -w сохраняет blob в .git/objects/. Без флага - просто возвращает SHA, не пишет.

SHA-1 хэш

Хэш считается не от чистого содержимого, а от строки:

blob <длина-в-байтах>\0<содержимое>

Префикс blob и длина - часть данных для хэширования. Поэтому пустой файл и файл с одной пустой строкой имеют разный SHA - длина разная.

Дедупликация

Если два файла в репозитории идентичны побайтово - у них одинаковый SHA, и Git хранит один blob. На уровне tree они выглядят как две разные записи (с разными именами), но обе указывают на один объект в .git/objects/.

Это даёт бесплатную дедупликацию по содержимому: одинаковые файлы не занимают место дважды, даже между разными коммитами.

§ команды

bash
git hash-object --stdin -w

Создать blob из стандартного ввода и сохранить в objects/

bash
git cat-file -p <sha>

Вывести содержимое blob в исходном виде

bash
git cat-file -t <sha>

Показать тип объекта (вернёт blob)

bash
git cat-file -s <sha>

Показать размер содержимого в байтах

§ см. также

  • treeTreeОбъект Git, который хранит список того, что лежит в одной директории: записи `(права, тип, SHA, имя)`. Рекурсивно ссылается на другие tree для поддиректорий.
  • commitCommitОбъект Git: снимок состояния всего проекта (через tree) плюс метаданные - автор, коммиттер, дата, родители, сообщение. SHA коммита включает SHA родителя, что делает историю криптографически связанной.
  • sha1SHA-1 в Git40-символьный хэш, по которому Git адресует объекты. Считается от содержимого с префиксом типа. Сломан криптографически в 2017 (SHAttered), но в Git до сих пор основной - миграция на SHA-256 идёт медленно.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки