SYNOPSIS

git ls-tree [-d] [-r] [-t] [-l] [-z]
            [--name-only] [--name-status] [--object-only] [--full-name] [--full-tree] [--abbrev[=<n>]] [--format=<format>]
            <tree-ish> [<path>…]

DESCRIPTION

「/bin/ls -a」が現在の作業ディレクトリで行うことのように、特定のツリーオブジェクトの内容を一覧表示します。 ただし以下の点に注意してください:

  • 動作は「/bin/ls」の動作とは少し異なり、「<path>」は一致するパターンのリストのみを示します。 したがって、( -r なしで)ディレクトリ名を指定すると動作が異なり、引数の順序は重要ではありません。

  • <path> が現在の作業ディレクトリを基準にして取得されるという点で、動作は「/bin/ls」の動作と似ています。例えば、あなたの現在の作業ディレクトリが「sub」で、その下にサブディレクトリ「dir」がある場合は、「git ls-tree -r HEAD dir」を実行すると、「dir」ツリーの内容を一覧表示できます(つまり、「HEAD」の「sub/dir」) 。あなたが、ルートレベル以外のツリーを直接指定したいとします(たとえば git ls-tree -r HEAD:sub dir と指定します)。しかし、この場合は結果として HEAD コミットで sub/sub/dir を要求したことになります(そしてそんなディレクトリはないので何も表示されない)。ただし、 --full-tree プションを渡すと、現在の作業ディレクトリを無視できます(つまり、 git ls-tree --fulltree -r HEAD:sub dir とすれば意図したとおりに動く)

OPTIONS

<tree-ish>

ツリーっぽい何か(tree-ish)のID

-d

名前付きツリーエントリ自体のみを表示し、その子供たちは表示しません。

-r

サブツリーに再帰的に入っていきます

-t

サブツリーに再帰的入っていく場合でも、ツリーエントリを表示します。 -r が渡されなかった場合は効果がありません。 -d-t の意味を含んでいます。

-l
--long

ブロブ(ファイル)エントリのオブジェクトサイズを表示します。

-z

\0 (NULバイト)出力での行終了であり、ファイル名をクォートしません。 詳細については、以下の OUTPUT FORMAT を参照してください。

--name-only
--name-status

(「long」出力ではなく)ファイル名のみを1行に1つずつリストします。 --object-only と組み合わせることはできません。

--object-only

オブジェクトの名前のみを 1 行に 1 つずつリストします。 --name-only または --name-status と組み合わせることはできません。 これは、 --format='%(objectname)' を指定するのと同じですが、このオプションとその正確な形式の両方で、コマンドは一般的なフォーマット・メカニズムを経由する代わりに、手動で最適化されたコードパス(hand-optimized codepath)を使用します。

--abbrev[=<n>]

40バイトの16進オブジェクト行全体を表示する代わりに、オブジェクトを一意に参照できる、少なくとも <n> 以上の長さの最短のプレフィックスを表示します。デフォルト以外の桁数は --abbrev=<n> で指定できます。(訳注:手元ではデフォルトは10桁で表示された。 --abbrev=1 とすると5桁(一部6桁)表示となった)

--full-name

現在の作業ディレクトリに関連するパス名を表示する代わりに、フルパス名を表示します。

--full-tree

現在の作業ディレクトリを無視して、ルートレベルを起点として一覧表示します。 --full-name の意味を含んでいます。

--format=<format>

表示される各結果に対して <format> 文字列を適用します。その際 <format> 文字列中の %(fieldname) は展開(interpolate)されます。 これはまた %%% に展開します。 %xNN (NN は 16 進数) を 16 進コード NN に展開し、 たとえば`%x00` は \0 (NUL) になります。 %09\t (TAB) に、 %0a は \n (LF) に展開されます。 --format を指定した場合、 --long--name-only--object-only などの他の書式変更(format-altering)オプションと組み合わせることはできません。 (訳注: sprintf の 書式文字列 みたいに自由な文章書ける。意味は無いけど git ls-tree --format='hogehoge' HEAD とかもOK)

[<path>…]

パスが指定されたら、それらを表示します(これは実際には生のパス名ではなく、一致するパターンのリストであることに注意してください)。 それ以外の場合は、ツリーのルートレベルを唯一のパス引数として暗黙的に使用します。

Output Format

ls-tree の出力形式は、--format オプションまたは --name-only などの他の書式変更(format-altering)オプションのいずれかによって決定されます(上記 --format 参照)。

特定の --format ディレクティブを使用することは、これらのオプションを使用することと同等ですが、フルフルのフォーマット機構を呼び出すと、適切なフォーマット・オプションを使用するよりも遅くなる可能性があります。

--format が既存のオプション ls-tree に正確にマッピングされる場合、適切な高速パス(appropriate faster path)が使用されます。 したがって、デフォルトの形式は以下と同等です:

%(objectmode) %(objecttype) %(objectname)%x09%(path)

この出力形式は、 git update-index--index-info--stdin が期待するものと互換性があります。

-l オプションを使用すると、形式が以下のように変わります

%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)

<objectname> のオブジェクトのサイズ(%(objectsize:padded))はバイト単位で表され、そのフィールドは最小幅 7 文字で右寄せされます。オブジェクト サイズは、 ブロブ (ファイル) エントリに対してのみ指定されます。 他のエントリでは、サイズの代わりに - 文字が使用されます。

-z オプションを指定しない場合、構成変数 core.quotePath で説明されているように、「異常な」文字を含むパス名が引用符で囲まれます(git-config(1) を参照)。 -z を使用すると、ファイル名がそのまま出力され、行はNULバイトで終了します。

Customized format:

%(fieldname) 表記を使用してさまざまなフィールドを展開できる --format オプションを使用して、カスタム形式で表示することができます。 たとえば、 objectname フィールドと path フィールドのみを気にする場合は、以下のような特定の --format で実行できます

git ls-tree --format='%(objectname) %(path)' <tree-ish>

FIELD NAMES

構造化フィールドのさまざまな値を使用して、結果の出力を展開できます。 出力行ごとに、以下の名前を使用できます:

objectmode

オブジェクトのモード。

objecttype

オブジェクトのタイプ(commit または blob または tree)。

objectname

オブジェクトの名前。

objectsize[:padded]

blob オブジェクトのサイズ (commit または tree の場合は -)。また、 %(objectsize:padded) を使用したサイズのパディング形式もサポートしています。

path

オブジェクトのパス名。

GIT

Part of the git(1) suite