SYNOPSIS

git cat-file <type> <object>
git cat-file (-e | -p) <object>
git cat-file (-t | -s) [--allow-unknown-type] <object>
git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
             [--buffer] [--follow-symlinks] [--unordered]
             [--textconv | --filters] [-Z]
git cat-file (--textconv | --filters)
             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

DESCRIPTION

SYNOPSISの最初の形式では、コマンドはリポジトリ内のオブジェクトのコンテンツまたはタイプを提供します。 オブジェクトのタイプを調べるために -t-p が使われているか、オブジェクトのサイズを調べるために -s が使われているか、あるいは --textconv--filters が使われている(これらはタイプ blob を意味する)場合を除いて、タイプは必須となります。

SYNOPSISの2番目の形式では、オブジェクトのリスト(改行で区切られている)がstdinに提供され、各オブジェクトのSHA-1のタイプとサイズがstdoutに出力されます。 オプションの <format> 引数を使用して、出力形式をオーバーライドできます。 --textconv または --filters のいずれかが指定された場合、入力は、適切なドライバーを決定できるように、オブジェクト名とそれに続くパス名を単一の空白で区切ってリストすることが期待されます。

OPTIONS

<object>

表示するオブジェクトの名前。 オブジェクト名を綴る方法のより完全なリストについては、 gitrevisions(7) の「SPECIFYING REVISIONS」セクションを参照してください。

-t

コンテンツの代わりに、 <object> で識別されるオブジェクトタイプを表示します。

-s

内容の代わりに、 <object> で識別されるオブジェクトのサイズを表示します。 --use-mailmap オプションとともに使用すると、 メールマップ・メカニズム(mailmap mechanism)を使用して ID を置き換えた後の更新されたオブジェクトのサイズが表示されます。

-e

<object> が存在し、有効なオブジェクトである場合、ステータスはゼロで終了(exit)します。 <object> が無効な形式の場合、ゼロ以外で終了(exit)し、stderrでエラーを発行します。

-p

そのタイプに基づいて <object> の内容をきれいに印刷(pretty-print)します。

<type>

通常、これは実際のタイプの <object> と一致しますが、指定された <object> から簡単に逆参照できるタイプを要求することもできます。 例として、<object>`がそれを含むコミットオブジェクトである `tree`を要求するか、または `<object> がそれを指すタグオブジェクトである blob を要求します。

--[no-]mailmap
--[no-]use-mailmap

mailmap ファイルを使用して、作者(author)やコミッター(commiter)やタグ付けした人(taggr)の名前と電子メール・アドレスを正規の実名と電子メール・アドレスにマップします。 git-shortlog(1) を参照してください。

--textconv

textconvフィルターによって変換されたコンテンツを表示します。 この場合、 <object> は、 <tree-ish>:<path> または :<path> の形式である必要があり、 <path> のインデックスに記録されたコンテンツにフィルターを適用します。

--filters

与えられた <path> に対して、現在の作業ツリーで構成されているフィルターによって変換された内容を表示します(つまり、スマッジ(smudge)フィルター、行末変換など)。 この場合、<object><tree-ish>:<path> または :<path> の形式である必要があります。

--path=<path>

--textconv または --filters とともに使用して、例えば、ブロブの元となったリビジョンを把握するのが難しいときに、オブジェクト名とパスを別々に指定できるようにします。

--batch
--batch=<format>

標準入力から提供される各オブジェクトの、 オブジェクト情報とコンテンツを出力します。 --textconv または --filters または --use-mailmap 以外は、 他のオプションや引数と組み合わせることはできません。

  • --textconv または --filters とともに使用する場合、 入力行では空白(whitespace)で区切ってパスを指定する必要があります。 詳細については、 下記「BATCH OUTPUT」セクションを参照してください。

  • --use-mailmap とともに使用すると、 コミット・オブジェクトとタグ・オブジェクトに対して、 出力の内容部分はメールマップ・メカニズムを使用して置き換えられた ID が表示され、 出力の情報部分には実際に置き換えられたIDを記録されたかのようにオブジェクトのサイズが表示されます。

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

標準入力から提供される各オブジェクトのオブジェクト情報を出力します。 --textconv または --filters または --use-mailmap を除いて、 他のオプションや引数と組み合わせることはできません。

  • --textconv または --filters とともに使用する場合、 入力行では空白(whitespace)で区切ってパスを指定する必要があります。 詳細については、 下記「BATCH OUTPUT」セクションを参照してください。

  • コミット・オブジェクトとタグ・オブジェクトに対して --use-mailmap とともに使用すると、 出力されるオブジェクト情報には、 オブジェクトに記録された ID がメールマップ・メカニズムによって置き換えられたかのように、 オブジェクトのサイズが表示されます。

--batch-command
--batch-command=<format>

標準入力からコマンドと引数を読み取るコマンド・モードに入ります。 --buffer または --textconv または --use-mailmap または --filters のみと組み合わせることができます。

  • --textconv または --filters とともに使用する場合、 入力行では空白(whitespace)で区切ってパスを指定する必要があります。 詳細については、 下記「BATCH OUTPUT」セクションを参照してください。

  • コミット・オブジェクトとタグ・オブジェクトに対して --use-mailmap とともに使用すると、 contents コマンドはメールマップ・メカニズムを使用して置換された ID を表示し、 info コマンドはあたかも実際に置換したIDを記録したかのようにオブジェクトのサイズを表示します。

--batch-command は以下のコマンドを認識します:

contents <object>

オブジェクト参照 <object> のオブジェクトの内容を出力します。 これは --batch の出力に対応します。

info <object>

オブジェクト参照 <object> のオブジェクト情報を出力します。 これは --batch-check の出力に対応します。

flush

--buffer とともに使用して、最初から、または最後のフラッシュが発行されてから発行された先行するすべてのコマンドを実行します。 --buffer を使用すると、 flush が発行されるまで何も出力されません。 --buffer を使用しない場合は、 flush を発行しなくてもコマンドを毎回フラッシュします。

--batch-all-objects

stdinでオブジェクトのリストを読み取る代わりに、 (到達可能なオブジェクトだけでなく、)リポジトリ内のすべてのオブジェクトと代替オブジェクトストア(alternate object stores)に対して要求されたバッチ操作を実行します。 --batch または --batch-check を指定する必要があります。 デフォルトでは、オブジェクトはハッシュでソートされた順序でアクセスされます。 下記 --unordered も参照してください。 オブジェクトは、git-replace(1) の置換メカニズムを考慮せずに、そのまま表示されます。

--buffer

通常、バッチ出力は各オブジェクトが出力された後にフラッシュされるため、プロセスは cat-file からインタラクティブに読み取りおよび書き込みを行うことができます。 このオプションを使用すると、出力は通常のstdioバッファリングを使用します。 これは、多数のオブジェクトで --batch-check または --batch-command を呼び出す場合には、はるかに効率的です。

--unordered

--batch-all-objects が使用されている場合に、このオプションを使用すると、ハッシュの順序よりもオブジェクトのコンテンツにアクセスするのに効率的な順序でオブジェクトにアクセスします。 順序の正確な詳細は指定されていませんが、特定の順序が必要ない場合は、特に --batch を使用すると、通常、出力が速くなります。 注意: cat-file は、リポジトリに同一オブジェクトが複数回保存されている場合でも、オブジェクトを1回だけ表示することに注意してください。

--allow-unknown-type

-s または -t が不明なタイプの 壊れた/破損した オブジェクトを照会できるようにします。

--follow-symlinks

--batch または --batch-check を使用して、 tree-ish:path-in-tree 形式の拡張SHA-1式を使用してオブジェクトを要求する場合は、リポジトリ内のシンボリックリンクをたどります。 リンク自体に関する出力を提供する代わりに、リンク先オブジェクトに関する出力を提供します。 シンボリックリンクがツリーっぽいものの外側を指している場合(たとえば、 /foo へのリンクまたは ../foo へのルートレベルのリンク)、ツリーの外側にあるリンクの部分が出力されます。

このオプションは、ツリー内のオブジェクトではなく、インデックス内のオブジェクトが指定されている場合(たとえば、 HEAD:link ではなく :link)、 (現在のところ)正しく機能しません。

--batch または --batch-check が使用されていない限り、このオプションは(現在のところ)使用できません。

たとえば、以下のものを含むgitリポジトリについて考えてみましょう:

f はファイルで、内容は "hello\n" です。
link は f への symlink です。
dir/link は ../f への symlink です。
plink は ../f への symlink です。
alink は /etc/passwd への symlink です。

通常のファイル 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

plinkalink はどちらもツリーの外側を指しているため、それぞれ以下のように出力されます:

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

--batch または --batch-check または --batch-command でのみ意味があります。 入出力は改行区切りではなく NUL 区切りです。

-z

--batch または --batch-check または --batch-command でのみ意味があります。 入力は改行区切りではなく NUL 区切りです。 このオプションは、 出力があいまいになる可能性があるため、 -Z を優先して非推奨になりました。

OUTPUT

-t が指定されている場合、 <type> の1つを出力。

-s が指定されている場合、 <object> のサイズ(バイト単位)を出力。

-e が指定されている場合、 <object> の形式が正しくない限り、出力は行われません。

-p を指定すると、<object> の内容がきれいに印刷(pretty-printed)されます。

<type> が指定されている場合、 <object> の生の(圧縮されていない)コンテンツが返されます。

BATCH OUTPUT

--batch または --batch-check が指定されている場合、 cat-file はstdinからオブジェクトを1行に1つずつ読み取り、それらに関する情報を出力します。 デフォルトでは、 git-rev-parse(1) にフィードされたかのように、行全体がオブジェクトと見なされます。

--batch-command が指定されると、 cat-file は標準入力からコマンドを 1 行に 1 つずつ読み取り、指定されたコマンドに基づいて情報を出力します。 --batch-command を使用すると、 info コマンドの後にオブジェクトが続くと --batch-check と同一の方法でオブジェクトに関する情報が出力され、 contents コマンドの後にオブジェクトが続くと --batch と同一の方法で内容が出力されます。

カスタム <format> を使用して、オブジェクトごとに表示される情報を指定できます。 <format> は、各オブジェクトのstdoutに文字通りコピーされ、 %(atom) `形式のプレースホルダーが展開され、その後に改行が続きます。 使用可能なatomは以下のとおりです:

objectname

オブジェクト名の完全な16進表現。

objecttype

オブジェクトのタイプ(cat-file -t で表示されるものと同じ)。

objectsize

オブジェクトのサイズ(バイト単位) (cat-file -s で表示されるものと同じ)。

objectsize:disk

オブジェクトがディスク上で占めるサイズ(バイト単位)。 下記「CAVEATS」セクションの「note about on-disk sizes」(ディスク上のサイズに関する注記)を参照してください。

deltabase

オブジェクトがディスク上にデルタとして保存されている場合、これはデルタベースオブジェクト名の完全な16進表現に展開されます。 それ以外の場合は、null OID ( 全てゼロ)に展開されます。 下記「CAVEATS」を参照してください。

rest

このatomが出力文字列で使用されている場合、入力行は最初の空白の境界で分割されます。 その空白の前のすべての文字がオブジェクト名と見なされます。 その最初の空白後の文字(つまり、行の「残り」)は、 %(rest) アトムに置き換えられて出力されます。

形式が指定されていない場合、デフォルトの形式は %(objectname) %(objecttype) %(objectsize) です。

--batch が指定されている場合、 または --batch-commandcontents コマンドで使用されている場合、 オブジェクト情報の後にオブジェクトの内容(%(objectsize) バイトのサイズ)が続き、その後に改行(newline)が続きます。

たとえば、カスタム形式のない --batch は、以下のように生成されます:

<oid> SP <type> SP <size> LF
<contents> LF

一方、 --batch-check='%(objectname) %(objecttype)' は、以下のように生成します:

<oid> SP <type> LF

リポジトリ内のオブジェクトに解決できない名前がstdinに指定されている場合、 cat-file はカスタム形式を無視して以下のように出力します:

<object> SP missing LF

(あいまいな短い sha など、)複数のオブジェクトを参照する可能性のある名前が指定されている場合、 cat-file はカスタム形式を無視して以下のように出力します:

<object> SP ambiguous LF

--follow-symlinks が使用され、リポジトリ内のシンボリックリンクがリポジトリの外部を指している場合、 cat-file はカスタム形式を無視して以下のように出力します:

symlink SP <size> LF
<symlink> LF

シンボリックリンク(symlink)はツリーのルートに対して絶対(absolute)(/ で始まる)か、あるいは相対(relative)です。 たとえば、 dir/link が ../../foo を指している場合、<symlink>../foo になります。 <size> は、バイト単位のシンボリックリンクのサイズです。

--follow-symlinks を使用すると、以下のエラーメッセージが表示されます:

<object> SP missing LF

これは、要求した最初のシンボリックリンク(initial symlink)が存在しない場合に出力されます。

dangling SP <size> LF
<object> LF

これは、最初のシンボリックリンク(initial symlink)が存在する場合に出力されますが、それが指すモノは出力されません。

loop SP <size> LF
<object> LF

これは、シンボリックリンクループ(または解決するために40を超えるリンク段数を必要とするシンボリックリンク)に対して出力されます。

notdir SP <size> LF
<object> LF

これは、シンボリックリンクの解決中に、ファイルがディレクトリ名として使用された場合に出力されます。

あるいは、 -Z を渡すと、 上記の例のいずれかの改行が NUL 終端に置き換えられます。 これにより、出力自体に改行が含まれる場合でも出力が解析可能になるため、 スクリプト作成の目的で推奨されます。

CAVEATS(警告)

注意: ディスク上のオブジェクトのサイズは正確に報告されますが、どのrefまたはオブジェクトがディスクの使用に関与しているかについて結論を出す際には注意が必要です。 パックされた非デルタオブジェクトのサイズは、それに対してデルタするオブジェクトのサイズよりもはるかに大きい場合がありますが、ベースとデルタのオブジェクトの選択は任意であり、再パック中に変更される可能性があります。

注意: オブジェクトの複数のコピーがオブジェクトデータベースに存在する可能性があることにも注意してください。 この場合、どのコピーのサイズまたはデルタベースが報告されるかは未定義です。

GIT

Part of the git(1) suite