# Blob _Объектная модель · GitLab Knowledge Base_ **TL;DR:** Объект Git, который хранит содержимое одного файла. Только байты, без имени, прав и даты. Имя файла лежит в `tree`, не в blob. Blob (binary large object) - самый простой из четырёх типов объектов Git. Содержит только содержимое файла, как последовательность байтов. Не знает ни как файл называется, ни где лежит. Имя файла, права доступа, путь - всё это хранится в [tree](/courses/git/kb/tree.md)-объекте, который ссылается на 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 ``` Вывести содержимое blob в исходном виде ```bash git cat-file -t ``` Показать тип объекта (вернёт blob) ```bash git cat-file -s ``` Показать размер содержимого в байтах ## См. также - [Tree](/courses/git/kb/tree.md) - [Commit](/courses/git/kb/commit.md) - [SHA-1 в Git](/courses/git/kb/sha1.md)