Git
英語 ▾ トピック ▾ 最新バージョン ▾ 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つのモードで動作できます。

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

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

オプション

<オブジェクト>

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

-t

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

-s

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

-e

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

-p

<オブジェクト>の内容をそのタイプに基づいて整形表示します。

<タイプ>

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

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

メールマップファイルを使用して、作成者、コミッター、およびタグ付け者の名前とメールアドレスを正規の実際の名前とメールアドレスにマップします。 git-shortlog[1]を参照してください。

--textconv

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

--filters

指定された<path>(つまり、smudgeフィルター、行末変換など)の現在の作業ツリーで設定されているフィルターによって変換された内容を表示します。この場合、<オブジェクト><tree-ish>:<path>または:<path>の形式である必要があります。

--path=<path>

--textconvまたは--filtersで使用する場合、blobの由来となったリビジョンを特定するのが難しい場合などに、オブジェクト名とパスを個別に指定できるようにします。

--batch
--batch=<format>

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

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

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

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

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

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

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

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

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

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

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

--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は、リポジトリに複数回格納されている場合でも、各オブジェクトを1回だけ表示することに注意してください。

--allow-unknown-type

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

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

このオプションは、ツリー内のオブジェクトではなく、インデックス内のオブジェクト(たとえば、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行ずつ読み込み、読み込んだ順序と同じ順序でオブジェクトに関する情報を出力します。デフォルトでは、行全体が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

オブジェクトがディスク上で占めるサイズ(バイト単位)。以下の「注意事項」セクションのディスク上のサイズに関する注意事項を参照してください。

deltabase

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

rest

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

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

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

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

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

(例示のための出力は省略)

<oid> SP <type> LF

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

<object> SP missing LF

(例示のための出力は省略)

<object> SP ambiguous LF

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

symlink SP <size> LF
<symlink> LF

(エラーメッセージの出力は省略)

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

<object> SP missing LF

(エラーメッセージの出力は省略)

dangling SP <size> LF
<object> LF

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

loop SP <size> LF
<object> LF

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

notdir SP <size> LF
<object> LF

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

は、要求された初期シンボリックリンクが存在しない場合に出力されます。

は、初期シンボリックリンクは存在するが、それが(推移的に)指しているものが存在しない場合に出力されます。

は、シンボリックリンクのループ(または解決に40以上のリンク解決を必要とするシンボリックリンク)に対して出力されます。

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

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

注意事項

scroll-to-top