# git cat-file _Инструменты · GitLab Knowledge Base_ **TL;DR:** Plumbing-команда для чтения объектов в `.git/objects/` по их SHA. Главные флаги: `-t` (тип), `-s` (размер), `-p` (содержимое в человекочитаемом виде), `-e` (проверить, есть ли объект). `git cat-file` - основной инструмент для просмотра содержимого Git-объектов «изнутри». Используется в скриптах, при отладке и при изучении того, как Git хранит данные. ## Базовые флаги ```bash git cat-file -t # тип: blob | tree | commit | tag git cat-file -s # размер содержимого в байтах git cat-file -p # содержимое (pretty-print) git cat-file -e # проверка существования, через exit code ``` Pretty-print подбирает форматирование под тип объекта: - blob → сырые байты как есть. - tree → таблица «mode type sha name». - commit → текстовое представление: tree, parent, author, committer, message. - tag → annotated tag со всеми полями. ## Примеры Какой объект под этим SHA? ```bash git cat-file -t 8d0e41 # blob ``` Показать содержимое последнего коммита: ```bash git cat-file -p HEAD # tree 7e3f9a2b1c4d5e6f... # parent a1b2c3d4... # author ... # committer ... # # Сообщение коммита ``` Заглянуть в корневое дерево этого коммита: ```bash git cat-file -p HEAD^{tree} # 100644 blob 5f7e9c12... README.md # 100644 blob 8a3f2e91... index.html ``` Проверить, есть ли объект, без вывода: ```bash if git cat-file -e 2>/dev/null; then echo "объект на месте" fi ``` ## Batch-режим Для скриптов, которые читают много объектов: ```bash echo HEAD | git cat-file --batch # commit 245 # tree ... # parent ... # ... ``` `--batch` принимает SHA на stdin построчно и выдаёт метаинформацию + содержимое для каждого. На больших репозиториях это в десятки раз быстрее, чем запускать `cat-file -p` для каждого SHA отдельно. ## Подводные камни - Pretty-print для blob выводит сырые байты как есть. Если blob - бинарный (картинка, архив), это сломает терминал. Сначала проверь тип через `-t`. - Объект может быть в packfile, и `cat-file` найдёт его всё равно - это plumbing-уровень, packfile прозрачен. - `-p HEAD` показывает commit-объект, не tree. Чтобы увидеть содержимое - `HEAD^{tree}` или `git ls-tree HEAD`. ## Команды ```bash git cat-file -t ``` Узнать тип объекта ```bash git cat-file -p HEAD ``` Распечатать commit с метаданными ```bash git cat-file -p HEAD^{tree} ``` Распечатать корневой tree коммита ```bash git cat-file -e ``` Проверить наличие объекта (exit code) ## См. также - [git rev-parse](/courses/git/kb/rev-parse.md) - [Blob](/courses/git/kb/blob.md) - [Tree](/courses/git/kb/tree.md) - [Commit](/courses/git/kb/commit.md)