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