日本語 ▾ トピック ▾ 最新バージョン ▾ git-cat-file は 2.46.1 で最終更新されました

名前

git-cat-file - リポジトリオブジェクトの内容または詳細を提供します

概要

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

説明

1つ以上のオブジェクトの内容や、サイズ、タイプ、デルタ情報などのプロパティを出力します。

このコマンドは、`--batch` ファミリーのオプションが指定されているかどうかに応じて、2つのモードで動作します。

非バッチモードでは、コマンドラインで指定されたオブジェクトに関する情報を提供します。

バッチモードでは、引数は標準入力から読み込まれます。

オプション

<object>

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

-t

内容の代わりに、`<object>` によって識別されるオブジェクトタイプを表示します。

-s

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

-e

`<object>` が存在し、かつ有効なオブジェクトであれば、ゼロステータスで終了します。`<object>` が無効な形式の場合、非ゼロステータスで終了し、stderr にエラーを出力します。

-p

`<object>` の内容をそのタイプに基づいて整形して表示します。

<type>

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

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

mailmap ファイルを使用して、作成者、コミッター、タグ付け者の名前とメールアドレスを正規の実際の名前とメールアドレスにマッピングします。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` と一緒に使用する場合、入力行は空白で区切られたパスを指定する必要があります。詳細は以下の `BATCH OUTPUT` セクションを参照してください。

  • `--use-mailmap` と一緒に使用する場合、コミットおよびタグオブジェクトについて、出力の内容部分はメールマップメカニズムを使用して置換されたIDを示し、出力の情報部分は実際に置換されたIDが記録されているかのようなオブジェクトのサイズを示します。

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

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

  • `--textconv` または `--filters` と一緒に使用する場合、入力行は空白で区切られたパスを指定する必要があります。詳細は以下の `BATCH OUTPUT` セクションを参照してください。

  • `--use-mailmap` と一緒に使用する場合、コミットおよびタグオブジェクトについて、出力されるオブジェクト情報は、そこに記録されたIDがメールマップメカニズムによって置換されたかのようなオブジェクトのサイズを示します。

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

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

  • `--textconv` または `--filters` と一緒に使用する場合、入力行は空白で区切られたパスを指定する必要があります。詳細は以下の `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

標準入力からオブジェクトのリストを読み込む代わりに、リポジトリおよび代替オブジェクトストア内のすべてのオブジェクト(到達可能なオブジェクトだけでなく)に対して要求されたバッチ操作を実行します。`--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` で不明なタイプの破損した/壊れたオブジェクトをクエリすることを許可します。

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

このオプションは、ツリー内のオブジェクトではなく、インデックス内のオブジェクトが指定された場合(例:`HEAD:link` の代わりに `:link`)、正しく機能しません(現在)。

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

例えば、以下の内容を含む git リポジトリを考えてみましょう。

f: a file containing "hello\n"
link: a symlink to f
dir/link: a symlink to ../f
plink: a symlink to ../f
alink: a symlink to /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` が指定されている場合、いずれかの `<type>`。

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

`-e` が指定されている場合、`<object>` が不正な形式でない限り、出力はありません。

`-p` が指定されている場合、`<object>` の内容は整形されて出力されます。

`<type>` が指定されている場合、`<object>` の生の(ただし非圧縮の)内容が返されます。

バッチ出力

`--batch` または `--batch-check` が指定されている場合、`cat-file` は標準入力から1行ごとにオブジェクトを読み込み、読み込まれた順序と同じ順序でそれらに関する情報を出力します。デフォルトでは、行全体がオブジェクトとみなされ、まるで git-rev-parse[1] に渡されたかのように扱われます。

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

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

objectname

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

objecttype

オブジェクトのタイプ (`cat-file -t` が報告するものと同じ)。

objectsize

オブジェクトのバイト単位のサイズ (`cat-file -s` が報告するものと同じ)。

objectsize:disk

オブジェクトがディスク上で占めるバイト単位のサイズ。以下の `CAVEATS` セクションにあるディスク上のサイズに関する注記を参照してください。

deltabase

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

rest

このアトムが出力文字列で使用されている場合、入力行は最初の空白区切りで分割されます。その空白の前のすべての文字がオブジェクト名とみなされます。その最初の空白の後の文字(つまり、行の「残り」)は、`%(rest)` アトムの代わりにそのまま出力されます。

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

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

例えば、カスタムフォーマットなしの `--batch` は以下を生成します。

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

一方、`--batch-check='%(objectname) %(objecttype)'` は以下を生成します。

<oid> SP <type> LF

標準入力で指定された名前がリポジトリ内のオブジェクトに解決できない場合、`cat-file` はカスタムフォーマットを無視し、以下を出力します。

<object> SP missing LF

複数のオブジェクトを参照する可能性のある名前(曖昧な短い SHA)が指定された場合、`cat-file` はカスタムフォーマットを無視し、以下を出力します。

<object> SP ambiguous LF

`--follow-symlinks` が使用され、リポジトリ内のシンボリックリンクがリポジトリの外を指している場合、`cat-file` はカスタムフォーマットを無視し、以下を出力します。

symlink SP <size> LF
<symlink> LF

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

`--follow-symlinks` が使用されている場合、以下のエラーメッセージが表示されます。

<object> SP missing LF

最初に要求されたシンボリックリンクが存在しない場合に表示されます。

dangling SP <size> LF
<object> LF

最初のシンボリックリンクは存在するが、それが(推移的に)指す何かが存在しない場合に表示されます。

loop SP <size> LF
<object> LF

シンボリックリンクループ(または解決に40回を超えるリンク解決を必要とするシンボリックリンク)の場合に表示されます。

notdir SP <size> LF
<object> LF

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

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

注意点

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

また、オブジェクトデータベース内にオブジェクトの複数のコピーが存在する場合があります。この場合、どのコピーのサイズまたはデルタベースが報告されるかは未定義です。

GIT

git[1] スイートの一部

scroll-to-top