Русский ▾ Topics ▾ Latest version ▾ git-cat-file last updated in 2.55.0
Changes in the git-cat-file manual
  1. 2.55.0 2026年06月29日
  2. 2.53.0 → 2.54.0 no changes
  3. 2.52.0 2025年11月17日
  4. 2.51.1 → 2.51.2 no changes
  5. 2.51.0 2025年08月18日
  6. 2.50.1 no changes
  7. 2.50.0 2025年06月16日
  8. 2.46.2 → 2.49.1 no changes
  9. 2.46.1 2024年09月13日
  10. 2.42.2 → 2.46.0 no changes
  11. 2.42.1 2023年11月02日
  12. 2.42.0 2023年08月21日
  13. 2.40.1 → 2.41.3 no changes
  14. 2.40.0 2023年03月12日
  15. 2.38.1 → 2.39.5 no changes
  16. 2.38.0 2022年10月02日
  17. 2.36.1 → 2.37.7 no changes
  18. 2.36.0 2022年04月18日
  19. 2.34.1 → 2.35.8 no changes
  20. 2.34.0 2021年11月15日
  21. 2.32.1 → 2.33.8 no changes
  22. 2.32.0 2021年06月06日
  23. 2.28.1 → 2.31.8 no changes
  24. 2.28.0 2020年07月27日
  25. 2.21.1 → 2.27.1 no changes
  26. 2.21.0 2019年02月24日
  27. 2.19.1 → 2.20.5 no changes
  28. 2.19.0 2018年09月10日
  29. 2.17.0 → 2.18.5 no changes
  30. 2.16.6 2019年12月06日
  31. 2.15.4 no changes
  32. 2.14.6 2019年12月06日
  33. 2.12.5 → 2.13.7 no changes
  34. 2.11.4 2017年09月22日
  35. 2.10.5 no changes
  36. 2.9.5 2017年07月30日
  37. 2.7.6 → 2.8.6 no changes
  38. 2.6.7 2017年05月05日
  39. 2.5.6 2017年05月05日
  40. 2.1.4 → 2.4.12 no changes
  41. 2.0.5 2014年12月17日

Check your version of git by running

git --version

НАЗВАНИЕ

git-cat-file — Предоставить содержимое или детали объектов репозитория

ОБЗОР

git cat-file <тип> <объект>
git cat-file (-e | -p | -t | -s) <объект>
git cat-file (--textconv | --filters)
	 [<ред>:<путь|указатель-дерева> | --path=<путь|указатель-дерева> <ред>]
git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
	 [--buffer] [--follow-symlinks] [--unordered]
	 [--textconv | --filters] [-Z]

ОПИСАНИЕ

Выводит содержимое или другие свойства, такие как размер, тип или информация о дельте, одного или нескольких объектов.

Эта команда может работать в двух режимах, в зависимости от того, указан ли параметр из семейства --batch.

В непакетном режиме команда предоставляет информацию об объекте, названном в командной строке.

В пакетном режиме аргументы читаются из стандартного ввода.

ПАРАМЕТРЫ

<объект>

Имя объекта для отображения. Более полный список способов написания имён объектов см. в разделе "ЗАДАНИЕ РЕВИЗИЙ" в gitrevisions[7].

-t

Вместо содержимого показывать тип объекта, идентифицируемый <объектом>.

-s

Вместо содержимого показывать размер объекта, идентифицируемый <объектом>. При использовании с параметром --use-mailmap покажет размер обновлённого объекта после замены идентификаторов с использованием механизма mailmap.

-e

Завершиться с нулевым статусом, если <объект> существует и является допустимым объектом. Если <объект> имеет недопустимый формат, завершиться с ненулевым статусом и выдать ошибку в stderr.

-p

Вывести содержимое <объекта> в красивом формате на основе его типа.

<type>

Обычно это соответствует реальному типу <объекта>, но также разрешено запрашивать тип, который может быть тривиально разыменован из данного <объекта>. Примером является запрос "дерева", где <объект> является объектом коммита, который его содержит, или запрос "blob-объекта", где <объект> является объектом метки, который указывает на него.

--mailmap
--no-mailmap
--use-mailmap
--no-use-mailmap

Использовать файл mailmap для сопоставления имён и адресов электронной почты автора, коммиттера и создателя метки с каноническими реальными именами и адресами электронной почты. См. git-shortlog[1].

--textconv

Показывать содержимое, преобразованное фильтром textconv. В этом случае <объект> должен иметь вид <указатель-дерева>:<путь> или :<путь>, чтобы применить фильтр к содержимому, записанному в индексе по <путь>.

--filters

Показывать содержимое, преобразованное фильтрами, настроенными в текущем рабочем каталоге для данного <пути> (т.е. фильтры smudge, преобразование концов строк и т.д.). В этом случае <объект> должен иметь вид <указатель-дерева>:<путь> или :<путь>.

--filter=<filter-spec>
--no-filter

Исключать объекты из списка выводимых объектов. Это можно использовать только в сочетании с одним из пакетных режимов. Исключённые объекты, которые были явно запрошены через любой из пакетных режимов, читающих объекты через стандартный ввод (--batch, --batch-check), будут сообщены как "filtered". Исключённые объекты в режиме --batch-all-objects не будут выводиться вообще. <спецификатор-фильтра> может быть одним из следующих:

Форма --filter=blob:none опускает все blob-объекты.

Форма --filter=blob:limit=<n>[kmg] опускает blob-объекты размером не менее n байт или единиц. n может быть нулём. Суффиксы k, m и g можно использовать для обозначения единиц в КиБ, МиБ или ГиБ. Например, blob:limit=1k — это то же самое, что и blob:limit=1024.

Форма --filter=object:type=(tag|commit|tree|blob) опускает все объекты, которые не являются запрошенным типом.

--path=<path>

Для использования с --textconv или --filters, чтобы позволить указывать имя объекта и путь отдельно, например, когда трудно определить редакцию, из которой пришёл blob-объект.

--batch
--batch=<format>

Выводит информацию об объекте и содержимое для каждого объекта, предоставленного в stdin. Не может комбинироваться с любыми другими параметрами или аргументами, кроме --textconv, --filters или --use-mailmap.

  • При использовании с --textconv или --filters строки ввода должны указывать путь, разделённый пробелами. Подробности см. в разделе ПАКЕТНЫЙ ВЫВОД ниже.

  • При использовании с --use-mailmap для объектов коммитов и меток часть вывода с содержимым показывает идентификаторы, заменённые с использованием механизма mailmap, в то время как информационная часть вывода показывает размер объекта так, как если бы он действительно записывал заменённые идентификаторы.

--batch-check
--batch-check=<format>

Выводит информацию об объекте для каждого объекта, предоставленного в stdin. Не может комбинироваться с любыми другими параметрами или аргументами, кроме --textconv, --filters или --use-mailmap.

  • При использовании с --textconv или --filters строки ввода должны указывать путь, разделённый пробелами. Подробности см. в разделе ПАКЕТНЫЙ ВЫВОД ниже.

  • При использовании с --use-mailmap для объектов коммитов и меток выводимая информация об объекте показывает размер объекта так, как если бы идентификаторы, записанные в нём, были заменены механизмом mailmap.

--batch-command
--batch-command=<формат>

Входит в командный режим, который читает команды и аргументы из stdin. Может комбинироваться только с --buffer, --textconv, --use-mailmap или --filters.

  • При использовании с --textconv или --filters строки ввода должны указывать путь, разделённый пробелами. Подробности см. в разделе ПАКЕТНЫЙ ВЫВОД ниже.

  • При использовании с --use-mailmap для объектов коммитов и меток команда contents показывает идентификаторы, заменённые с использованием механизма mailmap, в то время как команда info показывает размер объекта так, как если бы он действительно записывал заменённые идентификаторы.

--batch-command распознаёт следующие команды:

contents <объект>

Выводит содержимое объекта для ссылки на объект <объект>. Это соответствует выводу --batch.

info <объект>

Выводит информацию об объекте для ссылки на объект <объект>. Это соответствует выводу --batch-check.

flush

Используется с --buffer для выполнения всех предыдущих команд, которые были выданы с начала или с момента последнего выдачи flush. Когда используется --buffer, вывод не будет поступать, пока не будет выдан flush. Когда --buffer не используется, команды сбрасываются каждый раз без выдачи flush.

--batch-all-objects

Вместо чтения списка объектов из stdin выполнить запрошенную пакетную операцию для всех объектов в репозитории и любых дополнительных хранилищах объектов (не только достижимых объектов). Требует указания --batch или --batch-check. По умолчанию объекты обрабатываются в порядке сортировки по их хешам; см. также --unordered ниже. Объекты представляются как есть, без учёта механизма "замены" git-replace[1].

--buffer

Обычно пакетный вывод сбрасывается после вывода каждого объекта, чтобы процесс мог интерактивно читать и писать из cat-file. С этим параметром вывод использует обычную буферизацию stdio; это гораздо эффективнее при вызове --batch-check или --batch-command для большого количества объектов.

--unordered

Когда используется --batch-all-objects, обрабатывать объекты в порядке, который может быть более эффективным для доступа к содержимому объектов, чем порядок хешей. Точные детали порядка не определены, но если вам не требуется конкретный порядок, это обычно должно приводить к более быстрому выводу, особенно с --batch. Обратите внимание, что cat-file всё равно покажет каждый объект только один раз, даже если он хранится в репозитории несколько раз.

С --batch или --batch-check следовать по символьным ссылкам внутри репозитория при запросе объектов с расширенными выражениями SHA-1 вида указатель-дерева:путь-в-дереве. Вместо вывода информации о самой ссылке выводить информацию о целевом объекте. Если символьная ссылка указывает за пределы указателя-дерева (например, ссылка на /foo или ссылка на корневом уровне на ../foo), будет выведена часть ссылки, которая находится за пределами дерева.

Этот параметр (в настоящее время) не работает корректно, когда указан объект в индексе (например, :link вместо HEAD:link), а не объект в дереве.

Этот параметр (в настоящее время) нельзя использовать, если не используется --batch или --batch-check.

Например, рассмотрим репозиторий git, содержащий:

f: файл, содержащий "hello\n"
link: символьная ссылка на f
dir/link: символьная ссылка на ../f
plink: символьная ссылка на ../f
alink: символьная ссылка на /etc/passwd

Для обычного файла f команда echo HEAD:f | git cat-file --batch выведет

ce013625030ba8dba906f756967f9e9ca394464a blob 6

И echo HEAD:link | git cat-file --batch --follow-symlinks выведет то же самое, как и HEAD:dir/link, поскольку они оба указывают на HEAD:f.

Без --follow-symlinks они вывели бы данные о самой символьной ссылке. В случае HEAD:link вы бы увидели

4d1ae35ba2c8ec712fa2a379db44ad639ca277bd blob 1

И plink, и alink указывают за пределы дерева, поэтому они соответственно выведут:

symlink 4
../f
symlink 11
/etc/passwd
-Z

Имеет смысл только с --batch, --batch-check или --batch-command; ввод и вывод разделяется NUL вместо символа новой строки.

-z

Имеет смысл только с --batch, --batch-check или --batch-command; ввод разделяется NUL вместо символа новой строки. Этот параметр устарел в пользу -Z, так как иначе вывод может быть неоднозначным.

ВЫВОД

Если указан -t, один из <тип>.

Если указан -s, размер <объекта> в байтах.

Если указан -e, вывода нет, если только <объект> не имеет неверный формат.

Если указан -p, содержимое <объекта> выводится в красивом формате.

Если указан <тип>, будет возвращено необработанное (хотя и несжатое) содержимое <объекта>.

ПАКЕТНЫЙ ВЫВОД

Если указан --batch или --batch-check, cat-file будет читать объекты из stdin, по одному на строку, и выводить информацию о них в том же порядке, в котором они были прочитаны. По умолчанию вся строка рассматривается как объект, как если бы она была передана git-rev-parse[1].

Когда указан --batch-command, cat-file будет читать команды из stdin, по одной на строку, и выводить информацию на основе указанной команды. С --batch-command команда info, за которой следует объект, выведет информацию об объекте так же, как это сделал бы --batch-check, а команда contents, за которой следует объект, выведет содержимое так же, как это сделал бы --batch.

Вы можете указать информацию, показываемую для каждого объекта, используя пользовательский <формат>. <формат> буквально копируется в stdout для каждого объекта, с раскрытием заполнителей вида %(атом), после чего следует новая строка. Доступные атомы:

objectname

Полное шестнадцатеричное представление имени объекта.

objecttype

Тип объекта (тот же, который сообщает cat-file -t).

objectmode

Если указанный объект имеет информацию о режиме (например, дерево или запись индекса), режим, выраженный как восьмеричное целое число. В противном случае — пустая строка.

objectsize

Размер объекта в байтах (тот же, который сообщает cat-file -s).

objectsize:disk

Размер, в байтах, который объект занимает на диске. См. примечание о размерах на диске в разделе ПРЕДОСТЕРЕЖЕНИЯ ниже.

deltabase

Если объект хранится на диске в виде дельты, раскрывается в полное шестнадцатеричное представление имени базового объекта дельты. В противном случае раскрывается в нулевой OID (все нули). См. ПРЕДОСТЕРЕЖЕНИЯ ниже.

rest

Если этот атом используется в строке вывода, входные строки разбиваются по первой границе пробела. Все символы до этого пробела считаются именем объекта; символы после этой первой последовательности пробелов (т.е. "остаток" строки) выводятся вместо атома %(rest).

Если формат не указан, формат по умолчанию — %(objectname) %(objecttype) %(objectsize).

Если указан --batch или если --batch-command используется с командой contents, за информацией об объекте следует содержимое объекта (состоящее из %(objectsize) байт), а затем новая строка.

Например, --batch без пользовательского формата выдаст:

<oid> SP <тип> SP <размер> LF
<содержимое> LF

В то время как --batch-check='%(objectname) %(objecttype) выдаст:

<oid> SP <тип> LF

Если в stdin указано имя, которое не может быть преобразовано в объект в репозитории, cat-file проигнорирует любой пользовательский формат и выведет:

<объект> SP missing LF

Если в stdin указано имя, которое отфильтровано с помощью --filter=, то cat-file проигнорирует любой пользовательский формат и выведет:

<объект> SP excluded LF

Если указано имя, которое может ссылаться более чем на один объект (неоднозначный короткий sha), то cat-file проигнорирует любой пользовательский формат и выведет:

<объект> SP ambiguous LF

Если указано имя, которое ссылается на запись подмодуля в дереве, а целевой объект не существует в репозитории, то cat-file проигнорирует любой пользовательский формат и выведет (с идентификатором объекта подмодуля):

<oid> SP submodule LF

Если используется --follow-symlinks и символьная ссылка в репозитории указывает за пределы репозитория, то cat-file проигнорирует любой пользовательский формат и выведет:

symlink SP <размер> LF
<символьная-ссылка> LF

Символьная ссылка будет либо абсолютной (начинающейся с /), либо относительной корня дерева. Например, если dir/link указывает на ../../foo, то <символьная-ссылка> будет ../foo. <размер> — это размер символьной ссылки в байтах.

Если используется --follow-symlinks, будут отображаться следующие сообщения об ошибках:

<объект> SP missing LF

выводится, когда запрошенная начальная символьная ссылка не существует.

dangling SP <размер> LF
<объект> LF

выводится, когда начальная символьная ссылка существует, но то, на что она (транзитивно) указывает, не существует.

loop SP <размер> LF
<объект> LF

выводится для циклов символьных ссылок (или любых символьных ссылок, для разрешения которых требуется более 40 разрешений ссылок).

notdir SP <размер> LF
<объект> LF

выводится, когда во время разрешения символьной ссылки файл используется как имя каталога.

В качестве альтернативы, когда передан -Z, символы перевода строки в любом из вышеуказанных примеров заменяются терминаторами NUL. Это гарантирует, что вывод будет пригоден для анализа, если сам вывод будет содержать перевод строки, и поэтому рекомендуется для использования в сценариях.

ПРЕДУПРЕЖДЕНИЯ

Обратите внимание, что размеры объектов на диске сообщаются точно, но следует проявлять осторожность при выводах о том, какие ссылки или объекты ответственны за использование диска. Размер упакованного недельтового объекта может быть намного больше размера объектов, которые дельтифицируются относительно него, но выбор того, какой объект является базой, а какой — дельтой, является произвольным и может измениться во время переупаковки.

Также обратите внимание, что в базе данных объектов может присутствовать несколько копий объекта; в этом случае не определено, размер или база дельты какой копии будут сообщены.

GIT

Является частью пакета git[1]

AltStyle によって変換されたページ (->オリジナル) /