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

名前

git-cat-file - リポジトリオブジェクトのコンテンツまたは詳細を提供する

概要

git cat-file <type> <object>
git cat-file (-e | -p | -t | -s) <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] の「リビジョンの指定」セクションを参照してください。

-t

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

-s

コンテンツの代わりに、<object> で識別されるオブジェクトサイズを表示します。--use-mailmap オプションと一緒に使用すると、mailmap メカニズムを使用して識別子を置換した後の更新されたオブジェクトのサイズが表示されます。

-e

<object> が存在し、有効なオブジェクトである場合は、ゼロステータスで終了します。<object> が無効な形式である場合は、非ゼロステータスで終了し、標準エラー出力にエラーを出力します。

-p

<object> のコンテンツをそのタイプに基づいて整形して出力します。

<type>

通常、これは <object> の実際のタイプと一致しますが、与えられた <object> から簡単に逆参照できるタイプを要求することも許可されています。例としては、それを格納するコミットオブジェクトが <object> である「tree」を要求したり、それを指すタグオブジェクトが <object> である「blob」を要求したりすることが挙げられます。

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

mailmap ファイルを使用して、作者、コミッター、タガーの名前とメールアドレスを正規の実名とメールアドレスにマッピングします。git-shortlog[1] を参照してください。

--textconv

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

--filters

与えられた <path> の現在のワーキングツリーで設定されたフィルター(スマッジフィルター、行末変換など)によって変換されたコンテンツを表示します。この場合、<object><tree-ish>:<path> または :<path> の形式である必要があります。

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

出力されるオブジェクトのリストからオブジェクトを除外します。これはバッチモードのいずれかと組み合わせてのみ使用できます。標準入力 (--batch, --batch-check) を介してオブジェクトを読み取るバッチモードのいずれかによって明示的に要求された除外されたオブジェクトは、「filtered」として報告されます。--batch-all-objects モードで除外されたオブジェクトはまったく出力されません。<filter-spec> は次のいずれかです

形式 --filter=blob:none はすべてのブロブを省略します。

形式 --filter=blob:limit=<n>[kmg] は、サイズが n バイトまたは単位以上のブロブを省略します。n はゼロでもかまいません。接尾辞 k、m、g は、KiB、MiB、または GiB の単位を示すために使用できます。たとえば、blob:limit=1kblob:limit=1024 と同じです。

形式 --filter=object:type=(tag|commit|tree|blob) は、要求されたタイプではないすべてのオブジェクトを省略します。

--path=<path>

--textconv または --filters と組み合わせて使用​​し、たとえばブロブの発生元のリビジョンを特定するのが難しい場合に、オブジェクト名とパスを個別に指定できるようにします。

--batch
--batch=<format>

stdin で提供される各オブジェクトのオブジェクト情報と内容を出力します。--textconv--filters--use-mailmap 以外の他のオプションや引数と組み合わせることはできません。

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

  • --use-mailmap とともに使用する場合、コミットオブジェクトとタグオブジェクトの場合、出力のコンテンツ部分は mailmap メカニズムを使用して置き換えられた識別子を示し、出力の情報部分は、置き換えられた識別子が実際に記録されたかのようにオブジェクトのサイズを示します。

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

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

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

  • --use-mailmap とともに使用する場合、コミットオブジェクトとタグオブジェクトの場合、出力されるオブジェクト情報は、それに記録された識別子が mailmap メカニズムによって置き換えられたかのようにオブジェクトのサイズを示します。

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

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

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

  • --use-mailmap とともに使用する場合、コミットオブジェクトとタグオブジェクトの場合、contents コマンドは mailmap メカニズムを使用して置き換えられた識別子を示し、info コマンドは、置き換えられた識別子が実際に記録されたかのようにオブジェクトのサイズを示します。

--batch-command は次のコマンドを認識します

contents <object>

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

info <object>

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

flush

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

--batch-all-objects

標準入力でオブジェクトのリストを読み取る代わりに、リポジトリ内のすべてのオブジェクトと代替オブジェクトストア(到達可能なオブジェクトだけでなく)に対して要求されたバッチ操作を実行します。--batch または --batch-check の指定が必要です。デフォルトでは、オブジェクトはハッシュによってソートされた順序で訪問されます。以下の --unordered も参照してください。オブジェクトは、git-replace[1] の「replace」メカニズムを尊重せずに、そのまま表示されます。

--buffer

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

--unordered

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

--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

plinkalink はどちらもツリーの外を指しているので、それぞれ次の出力を行います。

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行につき1つずつ読み込み、読み込まれた順序でそれらに関する情報を出力します。デフォルトでは、行全体がオブジェクトとして扱われ、あたかも git-rev-parse[1] に供給されたかのように処理されます。

--batch-command が指定されている場合、cat-file は標準入力からコマンドを1行につき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 が指定されている場合、または --batch-commandcontents コマンドとともに使用されている場合、オブジェクト情報に続いてオブジェクトの内容(%(objectsize) バイトで構成)、その後に改行が続きます。

たとえば、カスタムフォーマットなしの --batch は次の出力を行います。

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

一方、--batch-check='%(objectname) %(objecttype) は次の出力を行います。

<oid> SP <type> LF

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

<object> SP missing LF

--filter= を介してフィルタリングされた名前が標準入力で指定された場合、cat-file はカスタムフォーマットを無視して次の出力を行います。

<object> SP excluded 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